一、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)反射在运行时才会检查出错误,编译时不会