Функция reflect.ValueOf
Функция reflect.ValueOf принимает в качестве параметра
любое значение и возвращает структуру reflect.Value,
которая представляет собой отраженное значение переданной
переменной. С помощью возвращенного объекта можно получать
информацию о типе, значении и изменять значение переменной
(если оно адресуемое). Функция является основным входным
пунктом в механизм рефлексии языка Go.
Синтаксис
func ValueOf(i any) Value
Пример
Получение значения из переменной и ее типа:
package main
import (
"fmt"
"reflect"
)
func main() {
num := 42
val := reflect.ValueOf(num)
fmt.Println(val)
fmt.Println(val.Type())
fmt.Println(val.Kind())
}
Результат выполнения кода:
42
int
int
Пример
Получение отраженного значения для строковой переменной:
package main
import (
"fmt"
"reflect"
)
func main() {
str := "abcde"
val := reflect.ValueOf(str)
fmt.Println(val)
fmt.Println(val.Type())
fmt.Println(val.Kind())
}
Результат выполнения кода:
abcde
string
string
Пример
Получение отраженного значения для слайса:
package 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())
}
Результат выполнения кода:
[1 2 3 4 5]
[]int
slice
5
Пример
Работа с указателем и получение адресуемого значения:
package 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)
}
}
Результат выполнения кода:
*int
ptr
false
20
Смотрите также
-
функцию
reflect.Value,
которая представляет отраженное значение переменной -
функцию
reflect.TypeOf,
которая возвращает отраженный тип переменной -
функцию
reflect.Value.Interface,
которая извлекает интерфейсное значение -
функцию
reflect.Indirect,
которая разыменовывает указатель