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