РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1506 of 1593 menu

Метод 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,
    который получает информацию о поле структуры по имени на уровне типа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить