Ответ
В Go работа с неинициализированной (нулевой, nil
) map имеет свои особенности: чтение безопасно, а запись вызывает панику.
Чтение из
nil
map
При чтении изnil
map вы не получите ошибку. Операция вернет нулевое значение для типа-значения этой map. Проверка наличия ключа с помощью идиомыvalue, ok := m["key"]
также безопасна. Дляnil
mapok
всегда будетfalse
.Запись в
nil
map
Попытка добавить или изменить элемент вnil
map приведет к панике во время выполнения:panic: assignment to entry in nil map
.
Пример:
package main
import "fmt"
func main() {
var m map[string]int // m == nil
// Чтение - безопасно
fmt.Println(m["some_key"]) // Выведет: 0 (нулевое значение для int)
value, ok := m["some_key"]
fmt.Printf("Value: %d, OK: %vn", value, ok) // Выведет: Value: 0, OK: false
// Запись - вызовет панику
m["some_key"] = 1 // panic: assignment to entry in nil map
}
Решение:
Чтобы избежать паники, map необходимо инициализировать перед использованием с помощью функции make
или литерала map:
// Способ 1: с помощью make
m := make(map[string]int)
// Способ 2: с помощью литерала
m := map[string]int{}