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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!