go-反射
chan是什么类型就能存放什么类型的数据,我们看看反射,他可不管你什么类型,随便传吧,fmt.Println中传入任何类型的数据都可以打印
1) 反射可以在运行时动态获取变量的各种信息, 比如变量的类型(type),类别(kind)
reflectType(变量名) reflectValue(变量名)
2) 如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法)
3) 通过反射,可以修改变量的值,可以调用关联的方法。
func reflectTest01(b interface{}) {
//通过反射获取的传入的变量的 type , kind, 值
//1. 先获取到 reflect.Type
rTyp := reflect.TypeOf(b)
fmt.Println("rType=", rTyp)
//2. 获取到 reflect.Value
rVal := reflect.ValueOf(b)
rVal.Elem().SetInt(180)
fmt.Println(rVal)
}
func main() {
var num int = 100
reflectTest01(&num)
fmt.Println("num=", num)
}
运行结果:
rType= *int
0xc00001e108
num= 180
通过反射的来修改变量,注意当使用 SetXxx 方法来设置需要通过对应的指针类型来完成,这样才能改变传入的变量的值,同时需要使用到 reflect.Value.Elem ()
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: