Функция reflect.AppendSlice
Функция reflect.AppendSlice добавляет все элементы
из одного слайса в конец другого слайса. Она принимает
два параметра: первым параметром передается значение
типа reflect.Value, представляющее целевой слайс,
вторым параметром - значение типа reflect.Value,
представляющее слайс, элементы которого нужно добавить.
Функция возвращает новое значение типа reflect.Value,
представляющее результирующий слайс. Важно отметить, что
оба аргумента должны быть слайсами одного типа, иначе
будет вызвана паника.
Синтаксис
reflect.AppendSlice(slice, elements)
Пример
Давайте объединим два слайса строк с помощью функции
reflect.AppendSlice:
package main
import (
"fmt"
"reflect"
)
func main() {
s1 := []string{"a", "b", "c"}
s2 := []string{"d", "e"}
val1 := reflect.ValueOf(s1)
val2 := reflect.ValueOf(s2)
res := reflect.AppendSlice(val1, val2)
fmt.Println(res.Interface())
}
Результат выполнения кода:
[a b c d e]
Пример
Давайте объединим два слайса чисел с помощью функции
reflect.AppendSlice:
package main
import (
"fmt"
"reflect"
)
func main() {
s1 := []int{1, 2, 3}
s2 := []int{4, 5, 6}
val1 := reflect.ValueOf(s1)
val2 := reflect.ValueOf(s2)
res := reflect.AppendSlice(val1, val2)
fmt.Println(res.Interface())
}
Результат выполнения кода:
[1 2 3 4 5 6]
Пример
Функция reflect.AppendSlice не изменяет исходные
слайсы, а создает новый результирующий слайс. Давайте
проверим это на примере:
package main
import (
"fmt"
"reflect"
)
func main() {
s1 := []string{"a", "b", "c"}
s2 := []string{"d", "e"}
val1 := reflect.ValueOf(s1)
val2 := reflect.ValueOf(s2)
res := reflect.AppendSlice(val1, val2)
fmt.Println("Original s1:", s1)
fmt.Println("Original s2:", s2)
fmt.Println("Result:", res.Interface())
}
Результат выполнения кода:
"Original s1: [a b c]"
"Original s2: [d e]"
"Result: [a b c d e]"
Пример
Попытка объединить слайсы разных типов вызовет панику. Давайте посмотрим на это:
package main
import (
"fmt"
"reflect"
)
func main() {
s1 := []string{"a", "b", "c"}
s2 := []int{1, 2, 3}
val1 := reflect.ValueOf(s1)
val2 := reflect.ValueOf(s2)
res := reflect.AppendSlice(val1, val2)
fmt.Println(res.Interface())
}
Результат выполнения кода:
"panic: reflect: AppendSlice of different types"
Смотрите также
-
функцию
reflect.Append,
которая добавляет один элемент в слайс -
функцию
reflect.MakeSlice,
которая создает новый слайс определенного типа и длины -
функцию
reflect.Copy,
которая копирует элементы между слайсами -
функцию
reflect.ValueOf,
которая создает значение reflect.Value из интерфейса