Функция reflect.ArrayOf
Функция reflect.ArrayOf создает reflect.Type, представляющий тип массива с указанной длиной и типом элементов. Первый параметр функции — длина массива (тип int), второй параметр — тип элементов (тип reflect.Type). Функция возвращает reflect.Type, который можно использовать для создания значений массива через reflect.New или для проверки типа через reflect.TypeOf.
Синтаксис
reflect.ArrayOf(length int, elemType reflect.Type) reflect.Type
Пример
Давайте создадим тип массива из 5 элементов типа int и проверим его свойства:
package 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())
}
Результат выполнения кода:
[5]int
array
5
int
Пример
Давайте создадим массив из строк с помощью reflect.ArrayOf и заполним его значениями:
package 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())
}
Результат выполнения кода:
[a b c]
Пример
Давайте создадим массив из структур и проверим возможность сравнения:
package 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())
}
Результат выполнения кода:
[{Alice 30} {Bob 25}]
Смотрите также
-
функцию
reflect.Type,
которая предоставляет информацию о типе -
функцию
reflect.TypeOf,
которая возвращает тип переменной -
функцию
reflect.SliceOf,
которая создает тип слайса -
функцию
reflect.StructOf,
которая создает тип структуры