Проверьте, существует ли значение в карте, используя внутреннюю функцию из этой структуры - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть такая структура

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.

Существует множество ссылок, которые предполагают, чтомы можем проверить, существует ли значение на карте с этой линией, я понятия не имею, что происходит.Что я делаю не так?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

Тип *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))
    }
}
...