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