Чем отличается make([]int, 5) от make([]int, 0, 5) в Go?

Если очень коротко и по делу, то:

* make([]int, 5) — создаёт слайс с длиной 5 и ёмкостью 5. Внутри уже лежат 5 нулей. Можно сразу читать и писать по индексам от 0 до 4 * make([]int, 0, 5) — создаёт слайс с длиной 0 и ёмкостью 5. Внутри память выделена, но элементов нет. При append элементы будут добавляться с первого места, без лишних аллокаций.

Зачем так?

Первый вариант удобен, если вы знаете точное количество элементов и хотите заполнять их по индексу: s[0] = 42.

Второй — если вы не знаете, сколько элементов будет, но примерно прикидываете (например, 5). Тогда append сработает быстро, без постоянного расширения массива под капотом.

Небольшой пример прикрепил к этому посту. 👇

#Интервью_lssgo #программирование_на_go #lessgo

Чем отличается make([]int, 5) от make([]int, 0, 5) в Go? | Сетка — социальная сеть от hh.ru