Функция reflect.SliceOf
Функция reflect.SliceOf принимает один параметр — тип элементов, из которых должен состоять слайс, и возвращает тип reflect.Type, представляющий слайс этого типа. Это позволяет динамически создавать типы слайсов во время выполнения программы.
Синтаксис
reflect.SliceOf(t reflect.Type) reflect.Type
Пример
Давайте создадим тип слайса для элементов типа int и выведем его строковое представление:
package main
import (
"fmt"
"reflect"
)
func main() {
t := reflect.TypeOf(0)
sliceType := reflect.SliceOf(t)
fmt.Println(sliceType)
}
Результат выполнения кода:
"[]int"
Пример
Создадим тип слайса для пользовательского типа структуры и проверим его вид:
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
t := reflect.TypeOf(Person{})
sliceType := reflect.SliceOf(t)
fmt.Println(sliceType)
}
Результат выполнения кода:
"[]main.Person"
Пример
Используем reflect.SliceOf вместе с reflect.New для создания нового слайса динамического типа:
package main
import (
"fmt"
"reflect"
)
func main() {
t := reflect.TypeOf("")
sliceType := reflect.SliceOf(t)
slicePtr := reflect.New(sliceType)
slice := slicePtr.Elem()
slice = reflect.Append(slice, reflect.ValueOf("hello"))
slice = reflect.Append(slice, reflect.ValueOf("world"))
fmt.Println(slice.Interface())
}
Результат выполнения кода:
[hello world]
Смотрите также
-
функцию
reflect.TypeOf,
которая возвращает тип переданного значения -
функцию
reflect.New,
которая создает указатель на новый объект указанного типа -
функцию
reflect.Append,
которая добавляет элемент в слайс через рефлексию -
функцию
reflect.ArrayOf,
которая создает тип массива из элементов указанного типа