Функция reflect.Append
Функция reflect.Append добавляет значение к срезу и возвращает новый срез того же типа.
Первый параметр функции — значение типа reflect.Value, представляющее срез.
Второй параметр — значение, которое необходимо добавить, также типа reflect.Value.
Если тип добавляемого значения не соответствует типу элементов среза, возникает паника.
Функция возвращает новое значение reflect.Value, представляющее обновленный срез.
Синтаксис
reflect.Append(slice, elem)
Пример
Давайте добавим строку в срез строк:
package main
import (
"fmt"
"reflect"
)
func main() {
s := []string{"a", "b", "c"}
sliceVal := reflect.ValueOf(s)
elemVal := reflect.ValueOf("d")
newSliceVal := reflect.Append(sliceVal, elemVal)
res := newSliceVal.Interface().([]string)
fmt.Println(res)
}
Результат выполнения кода:
[a b c d]
Пример
Теперь добавим число в срез целых чисел:
package main
import (
"fmt"
"reflect"
)
func main() {
nums := []int{1, 2, 3, 4}
sliceVal := reflect.ValueOf(nums)
elemVal := reflect.ValueOf(5)
newSliceVal := reflect.Append(sliceVal, elemVal)
res := newSliceVal.Interface().([]int)
fmt.Println(res)
}
Результат выполнения кода:
[1 2 3 4 5]
Пример
Если попытаться добавить элемент неправильного типа, программа завершится паникой:
package main
import (
"fmt"
"reflect"
)
func main() {
s := []string{"a", "b"}
sliceVal := reflect.ValueOf(s)
elemVal := reflect.ValueOf(42) // неправильный тип
newSliceVal := reflect.Append(sliceVal, elemVal)
res := newSliceVal.Interface().([]string)
fmt.Println(res)
}
Результат выполнения кода:
panic: reflect: call of reflect.Append on string Value
Смотрите также
-
функцию
reflect.AppendSlice,
которая добавляет весь срез к другому срезу через отражение -
функцию
reflect.MakeSlice,
которая создает новый срез указанного типа и длины -
функцию
reflect.ValueOf,
которая возвращает значение в видеreflect.Value -
функцию
reflect.TypeOf,
которая возвращает тип значения во время выполнения