Ответ
В Go для добавления элементов в слайс используется встроенная функция append()
. Она добавляет один или несколько элементов в конец слайса и возвращает новый слайс.
Если в базовом массиве, на который указывает слайс, достаточно места (т.е. len < cap
), новый элемент будет добавлен в этот же массив. Если места недостаточно, append
создаст новый массив с увеличенной емкостью, скопирует в него все старые элементы и добавит новые.
Пример:
// Создаем слайс с длиной 3 и емкостью 3
s := []int{1, 2, 3}
// Добавляем один элемент. Емкости не хватает, создается новый массив.
s = append(s, 4) // s: [1, 2, 3, 4]
// Добавляем еще два элемента.
s = append(s, 5, 6) // s: [1, 2, 3, 4, 5, 6]
Ключевые моменты:
Всегда присваивайте результат
append
обратно в переменную. Так какappend
может вернуть как указатель на старый массив, так и на совершенно новый, необходимо всегда обновлять переменную слайса:s = append(s, ...) // Правильно
append(s, ...) // Неправильно, результат может быть утерян
Объединение двух слайсов выполняется с помощью оператора
...
:
first := []int{1, 2}
second := []int{3, 4}
// Добавляем все элементы 'second' в 'first'
first = append(first, second...) // first: [1, 2, 3, 4]