note:
- 程序中的变量都是有变量名的,但是在编译后类型就变为一些地址等,但是使用空接口等等 我们是是不知道类型的 只有在真正运行的时候,才可以知道的, 这就是通过反射来实现的
- 在序列化和反序列化的时候就需要反射的操作,比如在返序列化的时候,不知道反序列化为具体的啥类型,这个时候就需要使用反射了;还有的应用是有的时候需要将数据库里面的行映射为我们需要的类型,这也是需要反射操作的;还有就是配置文件的解析操作,将配置文件进行解析赋值给我们的结构体变量的
- Type和Kind的区别:Kind的范围是比Type更大的,比如对于一个结构体而言,Type的类型为Dog,而King的类型为struct
- 对于基本类型type name 和kind都是一样的,对于Cat结构体而言不是的
- 对于切片来获取name是获取不到的
- 想要拿到变量的kind信息可以通过2中方式,可以通过TypeOf和ValueOf这种方法后,都有一个Kind的函数来拿到kind信息的
- v.Elem()v要是一个指针 那么通过这个函数就可以拿到这个指针对应的值了
- Go语言的反射中像数组、切片、Map、指针等类型的变量,它们的.Name()都是返回空。