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

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

Linda Hamilton
發布: 2024-12-05 18:05:19
原創
358 人瀏覽過

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中文網其他相關文章!

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