Ответ
Для объединения двух (или более) слайсов в Go используется встроенная функция append
в сочетании с оператором ...
(variadic argument).
Основной способ:
sliceA := []int{1, 2, 3}
sliceB := []int{4, 5, 6}
// Оператор ... распаковывает sliceB в отдельные элементы
combined := append(sliceA, sliceB...)
// combined теперь равен: []int{1, 2, 3, 4, 5, 6}
Важные моменты и производительность:
-
Поведение
append
иcapacity
:- Если у
sliceA
достаточно свободной емкости (capacity
), элементыsliceB
будут добавлены в тот же базовый массив, изменяяsliceA
. - Если емкости недостаточно,
append
выделит новый, больший массив, скопирует туда элементы изsliceA
, а затем добавит элементы изsliceB
. В этом случаеcombined
будет указывать на новый массив, аsliceA
останется неизменным.
- Если у
-
Оптимизация для больших слайсов: Чтобы избежать многократных перераспределений памяти при объединении нескольких или больших слайсов, лучше заранее выделить слайс нужного размера.
// Создаем слайс с нужной длиной и емкостью result := make([]int, 0, len(sliceA) + len(sliceB)) // Добавляем слайсы. Эти вызовы append не вызовут новых аллокаций. result = append(result, sliceA...) result = append(result, sliceB...)
Этот подход является наиболее производительным, так как выполняет только одну аллокацию памяти.