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

Check if a value exists in map using an internal function from that struct

我有这个结构

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 {

我收到这个错误:

Assignment count mismatch: 2=1.

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

提前致谢。

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

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))
    }
}