尋址映射值
在Go 中,嘗試直接修改映射值中的結構體字段,如下例所示,將會導致編譯錯誤:
import ( "fmt" ) type pair struct { a float64 b float64 } func main() { // Create a map where values are of the "pair" type. dictionary := make(map[string]pair) // Add an element to the map. dictionary["xxoo"] = pair{5.0, 2.0} fmt.Println(dictionary["xxoo"]) // Output: {5 2} // Attempt to modify a field within the map value. dictionary["xxoo"].b = 5.0 // Error: cannot assign to dictionary["xxoo"].b }
遇到此錯誤訊息是因為映射值無法定址。可尋址性是Go中的一個基本概念,它指的是定位變數記憶體位址的能力。無法間接修改不可尋址值,因為嘗試存取不可尋址值的結構體欄位會導致編譯錯誤。
要解決此問題,主要有兩種方法:
使用指標值
一種方法是使用指標值作為映射值。這種間接定址使得值可定址,從而允許欄位修改。以下是一個範例:
import ( "fmt" ) type pair struct { a float64 b float64 } func main() { // Create a map where values are pointers to "pair" structs. dictionary := make(map[string]*pair) // Add an element to the map. dictionary["xxoo"] = &pair{5.0, 2.0} fmt.Println(dictionary["xxoo"]) // Output: &{5 2} // Modify a field within the pointed-to struct. dictionary["xxoo"].b = 5.0 fmt.Println(dictionary["xxoo"].b) // Output: 5 }
值複製或取代
或者,您可以透過複製值或完全取代它來處理不可尋址的值。以下是兩個範例:
// Value Copying dictionary["xxoo"] = pair{5.0, 5.0}
// Value Replacement p := dictionary["xxoo"] p.b = 5.0 dictionary["xxoo"] = p
這兩種方法都允許您修改映射中的「pair」結構。
以上是如何修改 Go Map 值中的結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!