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

时间:2018-12-11 23:32:03

标签: 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))
    }
}

但是在这一行:

if zone, ok := z[id]; ok {

我收到此错误:

  

分配计数不匹配:2 = 1。

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

谢谢。

1 个答案:

答案 0 :(得分:4)

类型*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))
    }
}