Ответ
При попытке записи в неинициализированную (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