首頁 > 後端開發 > Golang > 為什麼無法在 Go Map 條目上呼叫指標接收器方法?

為什麼無法在 Go Map 條目上呼叫指標接收器方法?

Susan Sarandon
發布: 2024-12-30 01:15:10
原創
487 人瀏覽過

Why Can't I Call a Pointer Receiver Method on a Go Map Entry?

在 Golang 中取消引用地圖索引

在 Golang 中使用地圖時,了解引用地圖條目的限制非常重要。在最近的程式設計場景中,出現了一個關於錯誤的問題:「無法在 f[0] 上呼叫指標方法」。

為了澄清這個問題,讓我們檢查以下程式碼:

package main

import (
    "fmt"

    "inventory"
)

func main() {
    x := inventory.Cashier{}
    x.AddItem("item1", 13)
    f := x.GetItems()

    fmt.Println(f[0].GetAmount())
}
登入後複製

問題出在map的類型和呼叫的方法上。在 Driver.go 檔案中,在 Cashier 結構上呼叫 GetItems 方法,該方法會傳回商品對應的副本。然而,GetAmount 方法是一個指標接收方法,需要使用實際的結構體。

在 Go 中,映射條目無法直接定址,因為它們的位址可能會隨著映射的增長或收縮而改變。因此,您無法在地圖條目上呼叫指標接收器方法。

要解決此問題,您可以修改 GetItems 方法以傳回指向地圖的指標:

func (c *Cashier) GetItems() *map[int]item {
    return &c.items
}
登入後複製

透過這樣做,可以確保可以直接在地圖條目上呼叫 GetAmount 方法。這是修正後的主函數:

func main() {
    x := inventory.Cashier{}
    x.AddItem("item1", 13)
    f := x.GetItems()
    fmt.Println((*f)[0].GetAmount())
}
登入後複製

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

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