append добавляет элементы в слайс и возвращает новый слайс:
s := []int{1, 2, 3}
s = append(s, 4, 5)
Внутри append проверяет: достаточно ли capacity.
- Если да — элементы записываются в существующий массив, length увеличивается
- Если нет — выделяется новый массив побольше, данные копируются
s = append(s, ...). Если забыть — можно потерять данные при реаллокации.
// Добавить слайс к слайсу:
s1 = append(s1, s2...)
Нюанс: два слайса могут разделять один массив. Append в один может неожиданно изменить другой, если capacity достаточно.