在Go 中,當嘗試修改儲存在映射中的結構體的欄位時,可能會出現錯誤“無法分配給它”。這個問題源自於可尋址性的概念,它限制了對映射中的值的直接賦值。
pair 結構在映射中保存兩個 float64 值,例如字典[“xxoo”].b。為字典["xxoo"].b 指派新值失敗,因為映射值無法定址。
Go 映射旨在有效地儲存和檢索資料。為了保持這種效率,映射值是不可尋址的,這意味著記憶體管理允許它們根據需要移動。如果沒有可尋址性,則無法使用選擇器 (.) 運算子存取結構體欄位進行直接賦值。
要避免此限制,請使用指標類型作為映射值。例如,透過定義 map[string]*pair,指標間接定址使結構體可定址。這允許直接分配,如以下程式碼所示:
dict := make(map[string]*pair) dict["xxoo"] = &pair{5.0, 2.0} dict["xxoo"].b = 5.0
或者,如果使用具有值類型的映射,則分配現有值的副本或完全提供新值:
p := dict["xxoo"] p.b = 5.0 dict["xxoo"] = p // or dict["xxoo"] = pair{5.0, 5.0}
透過了解可尋址性並實施適當的解決方案,您可以有效地操作儲存在Go 映射中的結構。
以上是為什麼我不能指派給 Go Map 中的結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!