Функция reflect.SliceOf

Функция reflect.SliceOf принимает один параметр — тип элементов, из которых должен состоять слайс, и возвращает тип reflect.Type, представляющий слайс этого типа. Это позволяет динамически создавать типы слайсов во время выполнения программы.

Синтаксис

goreflect.SliceOf(t reflect.Type) reflect.Type

Пример

Давайте создадим тип слайса для элементов типа int и выведем его строковое представление:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  t := reflect.TypeOf(0)
  sliceType := reflect.SliceOf(t)
  fmt.Println(sliceType)
}

Результат выполнения кода:

go"[]int"

Пример

Создадим тип слайса для пользовательского типа структуры и проверим его вид:

gopackage main

import (
  "fmt"
  "reflect"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  t := reflect.TypeOf(Person{})
  sliceType := reflect.SliceOf(t)
  fmt.Println(sliceType)
}

Результат выполнения кода:

go"[]main.Person"

Пример

Используем reflect.SliceOf вместе с reflect.New для создания нового слайса динамического типа:

gopackage 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())
}

Результат выполнения кода:

go[hello world]

Смотрите также

  • функцию reflect.TypeOf,
    которая возвращает тип переданного значения
  • функцию reflect.New,
    которая создает указатель на новый объект указанного типа
  • функцию reflect.Append,
    которая добавляет элемент в слайс через рефлексию
  • функцию reflect.ArrayOf,
    которая создает тип массива из элементов указанного типа