首頁 > 後端開發 > Golang > 為什麼我不能直接修改 Go Map 中的結構體字段,有什麼替代方法?

為什麼我不能直接修改 Go Map 中的結構體字段,有什麼替代方法?

Mary-Kate Olsen
發布: 2024-12-16 11:39:10
原創
951 人瀏覽過

Why Can't I Directly Modify Struct Fields in Go Maps, and What's the Alternative?

理解 Go 中的映射值操作

在 Go 中,通常需要在映射中儲存資料結構,例如結構體。然而,一些用戶在嘗試直接在映射內修改這些結構值的欄位時遇到困難。這個問題探討了這個限制背後的原因。

為什麼我不能直接修改映射值欄位?

當你在映射中按值儲存結構體時,存取該結構檢索值的副本,而不是引用。因此,對此副本所做的任何修改都不會影響映射中的原始結構。若要修改原始結構,您必須先檢索副本,進行更改,然後將修改後的副本寫回映射中。

直接修改的替代方案

雖然映射值不允許直接欄位修改,但還有一種替代方法:將 指標 儲存到結構體。透過使用指針,您可以直接修改底層結構,而無需將其讀取並寫回映射。

考慮以下範例:

type dummy struct {
    a int
}

x := make(map[int]*dummy)
x[1] = &dummy{a: 1}
x[1].a = 2
登入後複製

在這種情況下,對應儲存指向虛擬結構的指標。當存取 x[1].a 時,您直接修改了指標引用的原始結構。這允許無縫字段修改,而無需讀取和寫入結構副本。

以上是為什麼我不能直接修改 Go Map 中的結構體字段,有什麼替代方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板