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

Функция reflect.Indirect

Функция reflect.Indirect возвращает значение, хранящееся по указателю, или само переданное значение, если оно не является указателем. В первый параметр мы передаем значение типа reflect.Value, которое может быть указателем, а функция возвращает значение, на которое указывает этот указатель. Если переданное значение не является указателем, функция возвращает его без изменений.

Синтаксис

reflect.Indirect(v reflect.Value) reflect.Value

Пример

Давайте создадим переменную типа int, получим ее указатель и с помощью функции reflect.Indirect получим значение:

package main import ( "fmt" "reflect" ) func main() { x := 42 v := reflect.ValueOf(&x) elem := reflect.Indirect(v) fmt.Println(elem.Interface()) fmt.Println(elem.Kind()) }

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

42 int

Пример

Если передать функции reflect.Indirect значение, которое не является указателем, она вернет его без изменений:

package main import ( "fmt" "reflect" ) func main() { x := 42 v := reflect.ValueOf(x) elem := reflect.Indirect(v) fmt.Println(elem.Interface()) fmt.Println(elem.Kind()) }

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

42 int

Пример

Функция reflect.Indirect полезна при работе с интерфейсами и указателями на структуры:

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p := &Person{Name: "John", Age: 30} v := reflect.ValueOf(p) elem := reflect.Indirect(v) fmt.Println(elem.FieldByName("Name").Interface()) fmt.Println(elem.FieldByName("Age").Interface()) }

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

"John" 30

Пример

Функция reflect.Indirect также может быть использована для работы с указателями на указатели:

package main import ( "fmt" "reflect" ) func main() { x := 42 p1 := &x p2 := &p1 v := reflect.ValueOf(p2) elem1 := reflect.Indirect(v) elem2 := reflect.Indirect(elem1) fmt.Println(elem1.Kind()) fmt.Println(elem2.Interface()) }

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

ptr 42

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

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