Метод reflect.Value.Field
Метод reflect.Value.Field возвращает значение поля структуры,
представленное в виде reflect.Value, по порядковому индексу
этого поля. В качестве единственного параметра метод принимает
целое число int - индекс поля. Индексация полей начинается
с нуля. Метод полезен для динамического доступа к полям структур
во время выполнения программы без знания их типов на этапе компиляции.
Если переданный индекс выходит за границы структуры, метод вызывает
панику.
Синтаксис
value.Field(index int) reflect.Value
Пример
Получим значение первого поля структуры типа string
и выведем его на экран:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
}
func main() {
u := User{Name: "John", Age: 30}
val := reflect.ValueOf(u)
nameField := val.Field(0)
fmt.Println(nameField)
}
Результат выполнения кода:
"John"
Пример
Получим второе поле структуры, имеющее тип int,
и проверим его тип с помощью метода Kind:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
}
func main() {
u := User{Name: "John", Age: 30}
val := reflect.ValueOf(u)
ageField := val.Field(1)
fmt.Printf("Value: %v, Kind: %v\n",
ageField, ageField.Kind())
}
Результат выполнения кода:
"Value: 30, Kind: int"
Пример
Попробуем получить значение поля по индексу, выходящему за пределы структуры. Это вызовет панику:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
}
func main() {
u := User{Name: "John", Age: 30}
val := reflect.ValueOf(u)
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered panic:", r)
}
}()
_ = val.Field(2)
fmt.Println("This line won't be executed")
}
Результат выполнения кода:
"Recovered panic: reflect: Field index out of range"
Смотрите также
-
метод
reflect.Value.FieldByName,
который позволяет получить поле структуры по его имени -
метод
reflect.Type.Field,
который возвращает информацию о поле по индексу на уровне типа -
функцию
reflect.ValueOf,
которая создает значениеreflect.Valueиз интерфейса -
метод
reflect.Type.FieldByName,
который получает информацию о поле структуры по имени на уровне типа