Ответ
Ответ:
Нет, записывать данные в неинициализированную (nil
) мапу в Go нельзя. Попытка такой записи приведет к панике во время выполнения программы (panic: assignment to nil map
).
Почему так происходит?
Нулевая (nil
) мапа не имеет выделенной в памяти структуры для хранения пар ключ-значение. По сути, это nil
-указатель на внутреннюю реализацию хеш-таблицы. При попытке записи Go не может найти место для размещения данных и аварийно завершает работу, чтобы предотвратить неопределенное поведение.
Правильный подход:
Перед использованием мапу необходимо инициализировать с помощью встроенной функции make()
или через литерал:
// Объявление nil-мапы
var m1 map[string]int
// m1["key"] = 42 // PANIC: assignment to nil map
// Правильная инициализация через make()
var m2 = make(map[string]int)
m2["key"] = 42 // OK
// Правильная инициализация через литерал
m3 := map[string]int{}
m3["key"] = 42 // OK
Важное замечание:
При этом, чтение из nil
-мапы является безопасной операцией. Она не вызовет панику, а просто вернет нулевое значение для типа-значения мапы (например, 0
для int
, ""
для string
, false
для bool
и т.д.).
var m map[string]int
val := m["non-existent"] // Безопасно, val будет равен 0
fmt.Println(val)