Метод reflect.Type.Field
Метод reflect.Type.Field возвращает информацию о поле структуры по его порядковому номеру. В качестве единственного параметра он принимает целочисленный индекс поля. Метод возвращает структуру reflect.StructField, которая содержит всю доступную информацию о поле: его имя, тип, тег и другие метаданные.
Синтаксис
field := t.Field(index)
Пример
Давайте получим информацию о первом поле структуры User:
package 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)
}
Результат выполнения кода:
"Name: Name"
"Type: string"
Пример
Давайте получим информацию о втором поле структуры User и его теге:
package 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"))
}
Результат выполнения кода:
"Name: Age"
"Type: int"
"Tag: json:\"user_age\""
"Tag json: user_age"
Пример
Давайте переберем все поля структуры с помощью метода Field:
package 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)
}
}
Результат выполнения кода:
"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,
которая получает значение поля по индексу