我目前正在学习 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
}
- 3 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消