-1

我有这个结构

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。

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

提前致谢。

4

1 回答 1

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))
    }
}
于 2018-12-11T23:36:25.963 回答