我有这个结构
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。
有很多链接建议我们可以检查带有该行的地图中是否存在值,我不知道发生了什么。我在做什么错了?
谢谢。
答案 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))
}
}