首頁 >後端開發 >Golang >為什麼Go Maps中不能直接修改struct欄位?

為什麼Go Maps中不能直接修改struct欄位?

Patricia Arquette
Patricia Arquette原創
2024-12-08 18:28:15827瀏覽

Why Can't I Directly Modify Struct Fields in Go Maps?

Go 中的映射值:揭開間接修改背後的神秘面紗

使用將整數鍵映射到結構體的Go 映射時,這是一種奇怪的行為出現:不能直接修改map值中的欄位。相反,您必須讀取該結構,修改它,然後將其重寫回映射。

為什麼需要這種解決方法?修改映射或切片中的結構體欄位是否會產生不可預見的隱藏成本?

答案在於 Go 處理值類型的方式。當您在映射中按值儲存結構體時,您實際上是在建立該結構體的副本。對此副本進行的任何修改都不會影響儲存在映射中的原始結構。

要修正此問題,您可以在映射中儲存指向該結構的指標。這允許您直接修改指標引用的結構。在程式碼中,這將轉換為使用map[whatever]*struct 而不是map[whatever]struct。

使用值類型或指標類型的選擇取決於應用程式的特定要求。然而,了解值類型和指標類型的細微差別很重要,以避免在 Go 中使用映射、切片和其他資料結構時出現意外行為。

以上是為什麼Go Maps中不能直接修改struct欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn