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

Метод reflect.Type.FieldByName

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

Синтаксис

field, ok := reflect.TypeOf(obj).FieldByName("FieldName")

Пример

Рассмотрим простой пример получения информации о поле структуры:

package main import ( "fmt" "reflect" ) type User struct { Name string Age int } func main() { user := User{Name: "John", Age: 30} t := reflect.TypeOf(user) field, ok := t.FieldByName("Name") if !ok { fmt.Println("Field not found") return } fmt.Println("Name:", field.Name) fmt.Println("Type:", field.Type) }

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

"Name: Name" "Type: string"

Пример

Попробуем получить поле, которого нет в структуре:

package main import ( "fmt" "reflect" ) type User struct { Name string Age int } func main() { user := User{Name: "John", Age: 30} t := reflect.TypeOf(user) _, ok := t.FieldByName("Email") if !ok { fmt.Println("Field Email not found") } }

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

"Field Email not found"

Пример

Получим доступ к тегам поля через структуру reflect.StructField:

package main import ( "fmt" "reflect" ) type User struct { Name string `json:"name" db:"username"` Age int `json:"age"` } func main() { user := User{Name: "John", Age: 30} t := reflect.TypeOf(user) field, ok := t.FieldByName("Name") if !ok { fmt.Println("Field not found") return } jsonTag := field.Tag.Get("json") dbTag := field.Tag.Get("db") fmt.Println("JSON tag:", jsonTag) fmt.Println("DB tag:", dbTag) }

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

"JSON tag: name" "DB tag: username"

Пример

Получим информацию о вложенных полях структуры:

package main import ( "fmt" "reflect" ) type Address struct { City string Index int } type User struct { Name string Address Address } func main() { user := User{Name: "John", Address: Address{City: "NY", Index: 12345}} t := reflect.TypeOf(user) field, ok := t.FieldByName("Address") if !ok { fmt.Println("Field not found") return } fmt.Println("Field name:", field.Name) fmt.Println("Field type:", field.Type) // Получаем информацию о вложенных полях innerType := field.Type if innerType.Kind() == reflect.Struct { for i := 0; i < innerType.NumField(); i++ { innerField := innerType.Field(i) fmt.Println("Inner field:", innerField.Name, "Type:", innerField.Type) } } }

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

"Field name: Address" "Field type: main.Address" "Inner field: City Type: string" "Inner field: Index Type: int"

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

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