为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中取消引用地图索引

在 Golang 中取消引用地图索引

Go
墨色风雨 2021-07-05 12:51:50
我目前正在学习 Go,我制作了这个简单粗暴的清单程序,只是为了修改结构和方法以了解它们是如何工作的。在驱动程序文件中,我尝试从收银台类型的项目映射中调用方法和项目类型。我的方法有指针接收者直接使用结构而不是复制。当我运行程序时出现此错误.\driver.go:11: cannot call pointer method on f[0]    .\driver.go:11: cannot take the address of f[0]库存.go:package inventorytype item struct{    itemName string    amount int}type Cashier struct{    items map[int]item    cash int}func (c *Cashier) Buy(itemNum int){    item, pass := c.items[itemNum]    if pass{        if item.amount == 1{            delete(c.items, itemNum)        } else{            item.amount--            c.items[itemNum] = item         }        c.cash++    }}func (c *Cashier) AddItem(name string, amount int){    if c.items == nil{        c.items = make(map[int]item)    }    temp := item{name, amount}    index := len(c.items)    c.items[index] = temp}func (c *Cashier) GetItems() map[int]item{    return c.items;}func (i *item) GetName() string{    return i.itemName}func (i *item) GetAmount() int{    return i.amount}Driver.go:package mainimport "fmt"import "inventory"func main() {    x := inventory.Cashier{}    x.AddItem("item1", 13)    f := x.GetItems()    fmt.Println(f[0].GetAmount())}代码的一部分,真正属于我的问题是GetAmount在功能上inventory.go的和打印语句driver.go
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

虽然其他答案很有用,但我认为在这种情况下,最好让非变异函数不带指针:


func (i item) GetName() string{

    return i.itemName

}


func (i item) GetAmount() int{

    return i.amount

}


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信