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

我有这个结构


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。


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


提前致谢。


烙印99
浏览 101回答 1
1回答

UYOU

该类型*Zone不支持索引。这是指针,不是地图。取消引用指针以修复代码:func (z *Zones) findById(id uint64) (Zone, error) {&nbsp; &nbsp; if zone, ok := (*z)[id]; ok { // <-- note change on this line&nbsp; &nbsp; &nbsp; &nbsp; return zone, nil&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return Zone{}, errors.New(fmt.Sprintf("Zone %d not found", id))&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go