Основы синтаксиса Строки и руны Массивы и слайсы Map Структуры и методы Интерфейсы Горутины и конкурентность Каналы defer, panic, recover Обработка ошибок Указатели Пакет sync Тестирование Пакеты и модули Стандартная библиотека Context Generics iota и перечисления Разное / продвинутое

Map

7 вопросов

Map в Go - встроенная хеш-таблица для хранения пар ключ-значение. Ключевые особенности: отсутствие гарантированного порядка, panic при записи в nil map, ограничения на типы ключей.

1 Что произойдёт при записи в nil map? 🟡 Средний
Ответ: B) panic

Чтение из nil map безопасно (вернёт zero value), но запись вызывает panic: assignment to entry in nil map. Перед записью map нужно инициализировать: m := make(map[string]int) или m := map[string]int{}.

Подробнее →
2 Какой результат: var m map[string]int; fmt.Println(m["key"])? 🟡 Средний
Ответ: B) 0

Чтение из nil map не вызывает panic - возвращается zero value типа значения. Для int это 0. Это поведение одинаково для nil map и для отсутствующего ключа в инициализированной map.

Подробнее →
3 Как получить длину map в Go? 🟢 Лёгкий
Ответ: C) len(map)

Встроенная функция len() работает с map, строками, слайсами, массивами и каналами. У map нет методов .length() или .size() - Go предпочитает встроенные функции методам.

Подробнее →
4 Как проверить, существует ли ключ в map? 🟢 Лёгкий
Ответ: C) v, ok := map[key]

Идиома «comma ok»: если ключ существует, ok = true, v - значение. Если нет, ok = false, v - zero value. В Go нет оператора in (как в Python) или метода .has().

Подробнее →
5 Гарантирован ли порядок итерации по map? 🟡 Средний
Ответ: C) Нет

Go намеренно рандомизирует порядок итерации по map, чтобы программисты не полагались на него. Если нужен порядок - отсортируйте ключи отдельно или используйте слайс пар.

Подробнее →
6 Как удалить элемент из map? 🟢 Лёгкий
Ответ: B) delete(map, key)

Встроенная функция delete(m, key) удаляет элемент. Безопасно вызывать для несуществующего ключа или nil map - просто ничего не произойдёт. Не возвращает значений.

Подробнее →
7 Можно ли использовать слайс как ключ map? 🟡 Средний
Ответ: B) Нет

Ключи map должны быть сравнимыми (поддерживать ==). Слайсы несравнимы, поэтому не могут быть ключами. Массивы - могут ([3]int сравним). Структуры - только если все поля сравнимы.

Подробнее →