在Go 中直接修改結構體映射中的字段
在Go 中,int 到struct 的映射允許您訪問結構體值透過使用密鑰。然而,直接修改結構體值中的欄位可能會導致意外的行為。
間接的原因
當你從映射中存取結構體值時,你實際上是存取結構體的副本。修改此副本不會修改映射中的原始結構。要更改原始結構體,您需要讀取它,修改它,然後將其寫入映射中。
這是因為 Go 在分配給映射時將結構體值儲存在單獨的記憶體位置。修改副本不會影響原始值。
隱含隱藏成本
修改切片或映射等其他資料結構中的結構體欄位沒有隱含隱藏成本。其行為與整數到結構的映射的情況相同,其中對結構副本的修改不會影響原始結構。
指標的使用
可以使用指標就地修改原始結構體值。透過在映射中儲存指向結構體的指標而不是結構體本身,您可以直接存取和修改原始結構體的欄位。
範例:
import "fmt" type dummy struct { a int } func main() { x := make(map[int]*dummy) x[1] = &dummy{a: 1} x[1].a = 2 fmt.Println(x[1].a) // Output: 2 }
在此範例中,我們使用指標存取結構體值,從而允許我們直接修改其欄位。
以上是如何正確修改Go Map中的struct字段?的詳細內容。更多資訊請關注PHP中文網其他相關文章!