Можно ли записывать данные в неинициализированную (nil) мапу в Go? Что произойдет?

Ответ

Ответ:
Нет, записывать данные в неинициализированную (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)