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

Тип reflect.StructField

Тип reflect.StructField представляет собой структуру, которая содержит метаинформацию об отдельном поле структуры. Он используется вместе с методом Field типа reflect.Type для получения информации о полях структуры во время выполнения. Основные поля этой структуры: Name (имя поля), Type (тип поля), Tag (строковый тег), Offset (смещение в байтах) и Anonymous (является ли поле анонимным).

Синтаксис

type StructField struct { Name string Type Type Tag StructTag Offset uintptr Anonymous bool // другие поля }

Пример

Давайте получим информацию о полях структуры с помощью reflect.TypeOf и метода Field:

package main import ( "fmt" "reflect" ) type User struct { ID int `json:"id"` Name string `json:"name"` Age int } func main() { user := User{ID: 1, Name: "John", Age: 30} t := reflect.TypeOf(user) for i := 0; i < t.NumField(); i++ { field := t.Field(i) fmt.Printf("Field %d: %s, type: %s, tag: %s\n", i, field.Name, field.Type, field.Tag) } }

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

"Field 0: ID, type: int, tag: json:\"id\"" "Field 1: Name, type: string, tag: json:\"name\"" "Field 2: Age, type: int, tag: "

Пример

Давайте проверим, является ли поле анонимным, используя поле Anonymous структуры StructField:

package main import ( "fmt" "reflect" ) type Address struct { City string } type Person struct { Address Name string } func main() { p := Person{Address: Address{City: "Moscow"}, Name: "Alex"} t := reflect.TypeOf(p) for i := 0; i < t.NumField(); i++ { field := t.Field(i) fmt.Printf("Field: %s, anonymous: %t\n", field.Name, field.Anonymous) } }

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

"Field: Address, anonymous: true" "Field: Name, anonymous: false"

Пример

Давайте получим смещение поля в структуре с помощью поля Offset:

package main import ( "fmt" "reflect" ) type Data struct { A bool B int64 C string } func main() { d := Data{A: true, B: 100, C: "test"} t := reflect.TypeOf(d) for i := 0; i < t.NumField(); i++ { field := t.Field(i) fmt.Printf("Field %s offset: %d bytes\n", field.Name, field.Offset) } }

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

"Field A offset: 0 bytes" "Field B offset: 8 bytes" "Field C offset: 16 bytes"

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

  • тип reflect.Type,
    который представляет тип данных в рефлексии
  • метод reflect.Type.Field,
    который возвращает информацию о поле по индексу
  • метод reflect.Type.FieldByName,
    который возвращает информацию о поле по имени
  • метод reflect.Type.NumField,
    который возвращает количество полей структуры
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить