首頁 > 後端開發 > Golang > 為什麼我無法取得 Go 中映射元素的位址?

為什麼我無法取得 Go 中映射元素的位址?

Linda Hamilton
發布: 2024-12-14 08:03:12
原創
331 人瀏覽過

Why Can't I Take the Address of a Map Element in Go?

為什麼「無法取得映射元素的位址」?

考慮以下程式碼片段:

odsMap := map[string]XMLElement{
    "key": {Value: "value"},
}

segRef := "key"
登入後複製

以下語句有效:

x := odsMap[segRef]
x.GetValue("@OriginDestinationKey")
登入後複製

但是,此語句失敗並顯示下列錯誤:

cannot call pointer method on odsMap[segRef]
cannot take the address of odsMap[segRef]
登入後複製

發生這些錯誤是因為地圖索引表達式無法定址。當新增條目時,映射的內部結構可能會發生變化,從而阻止其位址被取得。

因此,當使用儲存在映射中的非指標值上的指標接收器存取方法時,需要中間變數來取得該值的位址,如工作範例所示。

要避免此問題,請考慮將指標值儲存在映射中。例如:

type My int

func (m *My) Str() string { return strconv.Itoa(int(*m)) }

odsMap := map[string]*My{}
my := My(12)
odsMap[segRef] = &my
登入後複製

或者,您可以將非指標值指派給局部變數並取得其位址:

x := odsMap[segRef]
x.GetValue("@OriginDestinationKey") // Method call on *XMLElement
登入後複製

總之,映射索引表達式是不可尋址的,在存取映射中非指標值的指標方法時,需要使用中間變數或替代儲存策略。

以上是為什麼我無法取得 Go 中映射元素的位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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