理解 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中文網其他相關文章!