首頁 > 後端開發 > Golang > 主體

為什麼我不能指派給 Go Map 中的結構體欄位?

DDD
發布: 2024-11-27 13:13:13
原創
240 人瀏覽過

Why Can't I Assign to a Struct Field in a Go Map?

「無法在映射中分配對」:可尋址性解釋

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

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