Ответ
При добавлении элементов в слайс с помощью append, его емкость (capacity) увеличивается по следующему алгоритму:
- Если текущая емкость достаточна для нового элемента - слайс просто расширяется в пределах существующего массива
- Если места не хватает, выделяется новый массив с увеличенной емкостью:
- Для слайсов с capacity < 1024 - удваивается текущая емкость
- Для слайсов с capacity >= 1024 - увеличивается на 25%
Пример:
s := make([]int, 0, 1) // len=0, cap=1
s = append(s, 1) // len=1, cap=1 (вмещается)
s = append(s, 2) // len=2, cap=2 (удвоение)
s = append(s, 3) // len=3, cap=4 (удвоение)
Это поведение оптимизирует баланс между производительностью (минимизация аллокаций) и использованием памяти.