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

Метод reflect.Value.FieldByName

Метод reflect.Value.FieldByName возвращает значение поля структуры по его имени. Он принимает один параметр - строку с именем поля, а возвращает reflect.Value, представляющее значение этого поля. Если поле с указанным именем не найдено, возвращается нулевое значение reflect.Value, которое можно проверить с помощью метода IsValid.

Синтаксис

val.FieldByName(name)

Пример

Давайте получим значение поля структуры по его имени:

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int City string } func main() { p := Person{Name: "John", Age: 30, City: "New York"} val := reflect.ValueOf(p) nameField := val.FieldByName("Name") ageField := val.FieldByName("Age") cityField := val.FieldByName("City") fmt.Println(nameField.String()) fmt.Println(ageField.Int()) fmt.Println(cityField.String()) }

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

"John" 30 "New York"

Пример с проверкой существования поля

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

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p := Person{Name: "Alice", Age: 25} val := reflect.ValueOf(p) field := val.FieldByName("Name") if field.IsValid() { fmt.Println("Field exists:", field.String()) } else { fmt.Println("Field does not exist") } invalidField := val.FieldByName("Address") if invalidField.IsValid() { fmt.Println("Field exists:", invalidField.String()) } else { fmt.Println("Field does not exist") } }

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

"Field exists: Alice" "Field does not exist"

Пример с изменением значения поля

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

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p := Person{Name: "Bob", Age: 20} val := reflect.ValueOf(&p).Elem() nameField := val.FieldByName("Name") ageField := val.FieldByName("Age") if nameField.IsValid() && nameField.CanSet() { nameField.SetString("Robert") } if ageField.IsValid() && ageField.CanSet() { ageField.SetInt(35) } fmt.Printf("%+v\n", p) }

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

"{Name:Robert Age:35}"

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

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