tgoop.com/go_interview_lib/598
Create:
Last Update:
Last Update:
💬 Почему добавление элементов в nil-срез работает, а добавление в nil-мапу вызывает панику?
В Go срезы и тип map работают по-разному:
1. Срезы:
🔸 nil
-срез — это валидный срез с нулевой длиной (len == 0
) и нулевой ёмкостью (cap == 0
).
🔸 Когда мы вызываем append()
на nil
-срезе, Go выделяет новую память и создаёт срез с достаточной ёмкостью для хранения новых элементов. Поэтому добавление элементов в nil
-срез работает без ошибок.
Пример:
var a []int
a = append(a, 4, 5, 6) // Создаётся новый срез в памяти
fmt.Println(a) // [4 5 6]
2. Тип map
🔸
nil
-мапа неинициализирована и не имеет памяти для хранения пар ключ-значение.🔸 Любая попытка добавить элемент в
nil
-мапу вызовет панику, так как мапа не готова к использованию.🔸 Для работы с мапой её нужно явно инициализировать с помощью функции
make
.Пример:
var m map[int]int
// m[1] = 1 // Вызовет панику
m = make(map[int]int)
m[1] = 1 // Теперь работает
BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/598