Проверьте, существует ли значение в карте, используя внутреннюю функцию из этой структуры
У меня есть эта структура
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.
Theres много ссылок, которые предполагают, что мы можем проверить, существует ли значение на карте с этой линией, я понятия не имею, что происходит. Что я делаю неправильно?
Заранее спасибо.
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))
}
}