反射
golang的反射主要包含两个类型:reflect.Type
和reflect.Value
,他们主要由函数reflect.TypeOf(变量名)
以及reflect.ValueOf(变量名)
创建而来。其中Type
用于表示目标变量的类型的元数据,而通过Value
则是代表变量的值(可以对值进行修改、函数值进行函数调用等)。
在运行时动态获取变量的各种信息,比如变量的类型(type)、类别(kind)
如果是结构体变量,还可以获取结构体本身的 的信息(字段、方法)
通过反射可以修改变量的值,也可以调用关联方法
使用反射需要引入包
import "reflect"
反射的基本函数
返回结果:
通过反射修改值
在 Golang 中,通过 反射 的方法reflect.ValueOf
传入的不管是变量的值还是地址,通过反射都不可以直接修改变量的值,如果尝试修改,将会引发一个panic
:
上面的异常是说,SetInt
方法,也就是修改变量值的反射方法,不可以用在一个不可取地址的reflect.Value
上,通过reflect.ValueOf
传入变量获取的reflect.Value
都是不可取地址值。这是因为无论什么类型的变量,relect.Value
都是存储变量的指针(地址)。
值类型值传入
值类型取地址传入
使用
Elem()
方法访问变量内存结构体值访问
结构体字段值修改
反射操作方法与函数
最后更新于
这有帮助吗?