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