為什麼「無法取得映射元素的位址」?
考慮以下程式碼片段:
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中文網其他相關文章!