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

Ответ

Нулевое значение для типа map в Go — это nil. Работа с nil map имеет ключевые особенности, которые важно знать:

  1. Запись в nil map вызывает панику. Это одна из самых частых причин паники во время выполнения программы.

    // Неправильно: вызовет панику
    var m map[string]int
    m["key"] = 42 // panic: assignment to entry in nil map
  2. Чтение из nil map безопасно и не вызывает панику. При чтении nil map ведет себя как пустая map: возвращается нулевое значение для типа значения, а второй параметр (ok) будет false.

    var m map[string]int
    value, ok := m["key"]
    // Паники нет. value будет 0 (нулевое значение для int), ok будет false.
    fmt.Printf("Value: %d, OK: %vn", value, ok)

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

Перед записью в map её необходимо инициализировать с помощью make() или литерала map.

// 1. С помощью make()
m1 := make(map[string]int)
m1["key"] = 42

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

Вывод: Всегда инициализируйте map перед записью. Чтение из nil map безопасно, но всегда возвращает нулевое значение.