Go 使用该结构的内部函数检查映射中是否存在值

Go 使用该结构的内部函数检查映射中是否存在值,go,go-map,Go,Go Map,我有这个结构 type Zones map[uint64]Zone 我想有一个方法在地图上找到一个值,类似这样的 func (z *Zones) findById(id uint64) (Zone, error) { if zone, ok := z[id]; ok { return zone, nil } else { return zone{}, errors.New(fmt.Sprintf("Zone %d not found", id))

我有这个结构

type Zones map[uint64]Zone
我想有一个方法在地图上找到一个值,类似这样的

func (z *Zones) findById(id uint64) (Zone, error) {
    if zone, ok := z[id]; ok {
        return zone, nil
    } else {
        return zone{}, errors.New(fmt.Sprintf("Zone %d not found", id))
    }
}
但在这方面:

if zone, ok := z[id]; ok {
我得到了这个错误:

分配计数不匹配:2=1

有很多链接建议我们可以检查地图中是否存在该行的值,我不知道发生了什么。我做错了什么


提前感谢。

类型
*区域
不支持索引。这是指针,不是地图。取消引用指针以修复代码:

func (z *Zones) findById(id uint64) (Zone, error) {
    if zone, ok := (*z)[id]; ok { // <-- note change on this line
        return zone, nil
    } else {
        return Zone{}, errors.New(fmt.Sprintf("Zone %d not found", id))
    }
}
func(z*区域)findById(id uint64)(区域,错误){

if zone,ok:=(*z)[id];ok{//您应该得到的错误是
无效操作:z[id](type*Zones不支持索引)
非常感谢!)