Метод reflect.Type.Field

Метод reflect.Type.Field возвращает информацию о поле структуры по его порядковому номеру. В качестве единственного параметра он принимает целочисленный индекс поля. Метод возвращает структуру reflect.StructField, которая содержит всю доступную информацию о поле: его имя, тип, тег и другие метаданные.

Синтаксис

gofield := t.Field(index)

Пример

Давайте получим информацию о первом поле структуры User:

gopackage main

import (
  "fmt"
  "reflect"
)

type User struct {
  Name string
  Age  int
}

func main() {
  t := reflect.TypeOf(User{})
  field := t.Field(0)

  fmt.Println("Name:", field.Name)
  fmt.Println("Type:", field.Type)
}

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

go"Name: Name"
"Type: string"

Пример

Давайте получим информацию о втором поле структуры User и его теге:

gopackage main

import (
  "fmt"
  "reflect"
)

type User struct {
  Name string `json:"username"`
  Age  int  `json:"user_age"`
}

func main() {
  t := reflect.TypeOf(User{})
  field := t.Field(1)

  fmt.Println("Name:", field.Name)
  fmt.Println("Type:", field.Type)
  fmt.Println("Tag:", field.Tag)
  fmt.Println("Tag json:", field.Tag.Get("json"))
}

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

go"Name: Age"
"Type: int"
"Tag: json:\"user_age\""
"Tag json: user_age"

Пример

Давайте переберем все поля структуры с помощью метода Field:

gopackage main

import (
  "fmt"
  "reflect"
)

type Person struct {
  FirstName string
  LastName  string
  Age     int
  Email   string
}

func main() {
  t := reflect.TypeOf(Person{})
  numFields := t.NumField()

  for i := 0; i < numFields; i++ {
    field := t.Field(i)
    fmt.Printf("Field %d: %s (%s)\n", i, field.Name, field.Type)
  }
}

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

go"Field 0: FirstName (string)"
"Field 1: LastName (string)"
"Field 2: Age (int)"
"Field 3: Email (string)"

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

  • метод reflect.Type.NumField,
    который возвращает количество полей структуры
  • метод reflect.Type.FieldByName,
    который ищет поле по имени
  • тип reflect.StructField,
    который представляет информацию о поле структуры
  • функцию reflect.Value.Field,
    которая получает значение поля по индексу