Выбор ответа Junior Типы и нулевые значения спрашивают часто обновлено

Запись в nil-мапу в Go

Вопрос

Что произойдёт при выполнении кода?

var m map[string]int
m["a"] = 1

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: panic: assignment to entry in nil map. Нулевое значение мапы это nil.

Варианты ответа

  1. panic: assignment to entry in nil mapправильный ответ
  2. Мапа создастся автоматически, и в ней будет ключ "a"
  3. Ошибка компиляции: мапу нужно инициализировать
  4. Ничего: запись в nil-мапу молча игнорируется

Разбор

Нулевое значение мапы это nil. Читать из nil-мапы можно (вернётся нулевое значение), а запись вызывает panic во время выполнения. Компилятор это не ловит, потому что переменная могла быть присвоена где угодно. Автоматического создания, как у append для слайса, у мапы нет. Лечится m := make(map[string]int) или литералом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме