首頁 >後端開發 >Golang >為什麼我不能直接呼叫 Go Map 元素上的指標接收器方法?

為什麼我不能直接呼叫 Go Map 元素上的指標接收器方法?

Linda Hamilton
Linda Hamilton原創
2024-12-05 18:05:19366瀏覽

Why Can't I Directly Call Methods with Pointer Receivers on Go Map Elements?

使用指標方法存取映射元素

在 Go 中,使用具有指標接收器的方法存取映射元素可能會帶來挑戰。出現這種情況是因為映射索引表達式不可尋址。當嘗試呼叫映射索引表達式上的方法時,編譯器會檢查接收者類型是否為指標。如果不是,則會產生編譯時錯誤。

要理解該問題,請考慮程式碼片段:

x := odsMap[segRef]
x.GetValue("@OriginDestinationKey")

此程式碼成功存取變數 x 上的 GetValue 方法,它被指派了鍵 segRef 的對應值。

但是,以下程式碼片段會在編譯時失敗error:

odsMap[segRef].GetValue("@OriginDestinationKey")

錯誤訊息表示「cannot take the address of odsMap[segRef]」。這是因為 Go 地圖並非設計為可尋址的,從而允許地圖實現的最佳化和靈活性。

要解決此限制,有幾個選項:

  • 在map中儲存指標值:如果map值是指針,則map索引表達式的位址可以作為方法的接收者call.
  • 分配給臨時變數:或者,可以將映射值指派給可以取得位址的臨時變數。隨後,可以在臨時變數上呼叫該方法。請注意,該方法對指向物件所做的任何修改都不會反映在原始映射值中。

雖然這些解決方案提供了解決方法,但通常建議在具有指標的方法中使用指標值Go 中的接收器以避免 addr

以上是為什麼我不能直接呼叫 Go Map 元素上的指標接收器方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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