Функция reflect.ArrayOf

Функция reflect.ArrayOf создает reflect.Type, представляющий тип массива с указанной длиной и типом элементов. Первый параметр функции — длина массива (тип int), второй параметр — тип элементов (тип reflect.Type). Функция возвращает reflect.Type, который можно использовать для создания значений массива через reflect.New или для проверки типа через reflect.TypeOf.

Синтаксис

goreflect.ArrayOf(length int, elemType reflect.Type) reflect.Type

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  // Create array type of 5 ints
  arrType := reflect.ArrayOf(5, reflect.TypeOf(0))
  fmt.Println(arrType)
  fmt.Println(arrType.Kind())
  fmt.Println(arrType.Len())
  fmt.Println(arrType.Elem())
}

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

go[5]int
array
5
int

Пример

Давайте создадим массив из строк с помощью reflect.ArrayOf и заполним его значениями:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  // Create array type of 3 strings
  arrType := reflect.ArrayOf(3, reflect.TypeOf(""))
  
  // Create array value
  arrValue := reflect.New(arrType).Elem()
  
  // Set values
  arrValue.Index(0).SetString("a")
  arrValue.Index(1).SetString("b")
  arrValue.Index(2).SetString("c")
  
  fmt.Println(arrValue.Interface())
}

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

go[a b c]

Пример

Давайте создадим массив из структур и проверим возможность сравнения:

gopackage main

import (
  "fmt"
  "reflect"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  // Create array type of 2 Person structs
  arrType := reflect.ArrayOf(2, reflect.TypeOf(Person{}))
  
  // Create array value
  arrValue := reflect.New(arrType).Elem()
  
  // Create Person values
  p1 := Person{Name: "Alice", Age: 30}
  p2 := Person{Name: "Bob", Age: 25}
  
  // Set values
  arrValue.Index(0).Set(reflect.ValueOf(p1))
  arrValue.Index(1).Set(reflect.ValueOf(p2))
  
  fmt.Println(arrValue.Interface())
}

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

go[{Alice 30} {Bob 25}]

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

  • функцию reflect.Type,
    которая предоставляет информацию о типе
  • функцию reflect.TypeOf,
    которая возвращает тип переменной
  • функцию reflect.SliceOf,
    которая создает тип слайса
  • функцию reflect.StructOf,
    которая создает тип структуры