Что произойдет при попытке записи в неинициализированную (nil) map?

Ответ

При попытке записи в неинициализированную (nil) map программа упадет с паникой во время выполнения (runtime panic).

Сообщение об ошибке будет выглядеть так: panic: assignment to entry in nil map.

Почему это происходит?

Нулевое значение для типа map — это nil. nil-мапа не имеет выделенной в памяти базовой структуры данных (хэш-таблицы) для хранения элементов. Попытка записи — это обращение к несуществующей структуре, что и вызывает панику.

Пример, вызывающий панику:

// Объявляем переменную типа map, но не инициализируем ее.
// Ее значение по умолчанию — nil.
var m map[string]int

// Эта строка вызовет панику.
m["key"] = 42 // panic: assignment to entry in nil map

Как правильно инициализировать map:

Перед использованием мапу необходимо создать с помощью встроенной функции make() или через литерал.

// Способ 1: с помощью make
m1 := make(map[string]int)
m1["key"] = 42 // Работает

// Способ 2: с помощью литерала
m2 := map[string]int{}
m2["key"] = 42 // Тоже работает

Важное отличие: Чтение из nil-мапы

В отличие от записи, чтение из nil-мапы является безопасной операцией и не вызывает панику. Такая операция всегда возвращает нулевое значение для типа-значения мапы.

var m map[string]int // m is nil

value := m["any_key"] // Не будет паники, value будет равно 0 (нулевое значение для int)

// Проверка наличия ключа также работает корректно
_, ok := m["any_key"] // ok будет false