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