gpt4 book ai didi

pointers - 在 Golang 中取消引用 map 索引

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:38 25 4
gpt4 key购买 nike

我目前正在学习 Go,我制作了这个简单粗暴的 list 程序,只是为了修补结构和方法以了解它们的工作原理。在驱动程序文件中,我尝试从 Cashier 类型的项目映射中调用方法和项目类型。我的方法有指针接收器直接使用结构而不是制作副本。当我运行程序时出现此错误 .\driver.go:11: cannot call pointer method on f[0]
.\driver.go:11: 无法获取 f[0] 的地址

Inventory.go:

package inventory


type 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 main

import "fmt"
import "inventory"

func main() {
x := inventory.Cashier{}
x.AddItem("item1", 13)
f := x.GetItems()

fmt.Println(f[0].GetAmount())
}

真正与我的问题有关的代码部分是 inventory.go 中的 GetAmount 函数和 driver.go 中的 print 语句>

最佳答案

map 条目无法寻址(因为它的地址可能会在 map 增长/收缩期间发生变化),因此您不能在它们上调用指针接收器方法。

详细信息在这里:https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/4_pabWnsMp0

关于pointers - 在 Golang 中取消引用 map 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39547968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com