一、pair
1.在go语言中,每个变量类型都是静态的,即在创建的时候类型就已经确定,只有interface变量有反射一说。
2.每个interface变量都有一个对应的pair,其中记录了实际变量的值和类型:<value, type>。
3.当给变量赋值给其他变量时,对应的pair不发生改变。
二、reflect
1.reflect包提供了反射机制,允许我们对通过某变量作为形参输入得到该变量的type和value,可以通过反射机制推测出一个变量的类型和值。
2.reflect包中包含的两个重要函数:
(1)ValueOf(i interface{}):输入某变量可以得到当前变量的Value值,接口为空返回0
(2)TypeOf(i interface{}):输入某变量可以得到当前变量的Type类型,接口为空返回nil
3.正常代码中尽量不用反射,原因如下:
(1)业务代码中使用反射,增加了复杂性
(2)反射性能比较低
(3)反射在运行时才会检查出错误,编译时不会