Функция reflect.ValueOf

Функция reflect.ValueOf принимает в качестве параметра любое значение и возвращает структуру reflect.Value, которая представляет собой отраженное значение переданной переменной. С помощью возвращенного объекта можно получать информацию о типе, значении и изменять значение переменной (если оно адресуемое). Функция является основным входным пунктом в механизм рефлексии языка Go.

Синтаксис

gofunc ValueOf(i any) Value

Пример

Получение значения из переменной и ее типа:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  num := 42
  val := reflect.ValueOf(num)

  fmt.Println(val)
  fmt.Println(val.Type())
  fmt.Println(val.Kind())
}

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

go42
int
int

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  str := "abcde"
  val := reflect.ValueOf(str)

  fmt.Println(val)
  fmt.Println(val.Type())
  fmt.Println(val.Kind())
}

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

goabcde
string
string

Пример

Получение отраженного значения для слайса:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  slice := []int{1, 2, 3, 4, 5}
  val := reflect.ValueOf(slice)

  fmt.Println(val)
  fmt.Println(val.Type())
  fmt.Println(val.Kind())
  fmt.Println(val.Len())
}

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

go[1 2 3 4 5]
[]int
slice
5

Пример

Работа с указателем и получение адресуемого значения:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  num := 10
  ptr := &num
  val := reflect.ValueOf(ptr)

  fmt.Println(val.Type())
  fmt.Println(val.Kind())
  fmt.Println(val.IsNil())

  if val.Elem().CanSet() {
    val.Elem().SetInt(20)
    fmt.Println(num)
  }
}

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

go*int
ptr
false
20

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

  • функцию reflect.Value,
    которая представляет отраженное значение переменной
  • функцию reflect.TypeOf,
    которая возвращает отраженный тип переменной
  • функцию reflect.Value.Interface,
    которая извлекает интерфейсное значение
  • функцию reflect.Indirect,
    которая разыменовывает указатель