Go 中的映射值:揭開間接修改背後的神秘面紗
使用將整數鍵映射到結構體的Go 映射時,這是一種奇怪的行為出現:不能直接修改map值中的欄位。相反,您必須讀取該結構,修改它,然後將其重寫回映射。
為什麼需要這種解決方法?修改映射或切片中的結構體欄位是否會產生不可預見的隱藏成本?
答案在於 Go 處理值類型的方式。當您在映射中按值儲存結構體時,您實際上是在建立該結構體的副本。對此副本進行的任何修改都不會影響儲存在映射中的原始結構。
要修正此問題,您可以在映射中儲存指向該結構的指標。這允許您直接修改指標引用的結構。在程式碼中,這將轉換為使用map[whatever]*struct 而不是map[whatever]struct。
使用值類型或指標類型的選擇取決於應用程式的特定要求。然而,了解值類型和指標類型的細微差別很重要,以避免在 Go 中使用映射、切片和其他資料結構時出現意外行為。
以上是為什麼Go Maps中不能直接修改struct欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!