Проверка наличия ключа в Go
Нулевое значение не доказывает, что ключа нет: нуль
могли записать нарочно. Чтобы различить случаи,
обращение к карте записывают в две переменные:
значение и логический признак. Вторую часто
называют ok: true, если ключ
найден, false, если нет.
Проверим существующий и отсутствующий ключи:
ages := map[string]int{"ann": 20, "bob": 30}
v, ok := ages["ann"]
fmt.Println(v, ok)
v, ok = ages["zoe"]
fmt.Println(v, ok)
Для "ann" будет 20 и true.
Для "zoe" будет 0 и false.
Число совпало с нулем, но ok показывает
отсутствие ключа.
Ключ с нулевым значением намеренно:
scores := map[string]int{"guest": 0}
v, ok := scores["guest"]
fmt.Println(v, ok)
Значение 0, но ok равен true:
ключ есть. Без второй переменной это не отличить
от пропущенного ключа.
Дана следующая карта:
data := map[string]int{"k": 5}
Получите v и ok для "k"
и для "m". Выведите обе пары.
Даны переменные:
scores := make(map[string]int)
scores["zero"] = 0
Проверьте ok для ключа "zero"
и для "none". Выведите оба признака.
Создайте карту с любой одной парой.
Выведите только ok для существующего
и для отсутствующего ключа, игнорируя значение
пустым идентификатором.