Ответ
В Go существует несколько способов объединения слайсов, каждый из которых подходит для разных ситуаций.
С помощью
append
и оператора...
(самый идиоматичный способ)
Этот метод наиболее читаемый и распространенный. Оператор...
"распаковывает" второй слайс на отдельные элементы для функцииappend
.sliceA := []int{1, 2, 3}
sliceB := []int{4, 5, 6}
combined := append(sliceA, sliceB...)
// combined теперь [1 2 3 4 5 6]Важно:
append
может как модифицировать исходный слайс (если в егоcapacity
достаточно места), так и выделить новый массив. Поэтому результат всегда нужно присваивать переменной.С помощью
copy
иmake
(производительный способ для больших слайсов)
Этот способ эффективен, когда размеры слайсов заранее известны. Он позволяет избежать многократных переаллокаций памяти, которые могут произойти при использованииappend
.sliceA := []int{1, 2, 3}
sliceB := []int{4, 5, 6}
// Создаем новый слайс нужной длины
result := make([]int, len(sliceA) + len(sliceB))
// Копируем данные
copy(result, sliceA)
copy(result[len(sliceA):], sliceB)
// result теперь [1 2 3 4 5 6]С помощью цикла (гибкий способ)
Используется редко, в основном когда перед добавлением элементы нужно как-то обработать.sliceA := []int{1, 2}
sliceB := []int{3, 4}
var result []int
for _, v := range sliceA {
result = append(result, v)
}
for _, v := range sliceB {
result = append(result, v)
}
// result теперь [1 2 3 4]
Для объединения более двух слайсов можно просто последовательно вызывать append
:
all := append(sliceA, sliceB...)
all = append(all, sliceC...)