首页 > 后端开发 > Golang > 为什么无法在 Go Map 条目上调用指针接收器方法?

为什么无法在 Go Map 条目上调用指针接收器方法?

Susan Sarandon
发布: 2024-12-30 01:15:10
原创
503 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板