正如前面所说,反射一个非常重要的作用就是动态改变变量的值,从而在运行时实现通用性极强的一些功能

 

设置基本类型

设置一个基本类型变量的值是最基本的操作,主要有以下几步:

  1. 通过 reflect.ValueOf() 获取变量对应的 Value 对象,需要注意的是,此步骤必须对变量取地址后获取,否则接下来一步将无法设置
  2. 通过 Value 对象的 Elem() 方法获取到指针引用的内存变量并设置为可寻址
  3. 通过 Elem() 方法返回的 Value 对象的 Set() 方法,我们就可以设置相同类型的值了

 

 

 

打印出了:

new iVal is: 13

 

设置 slice 元素或数组元素

与上述设置基本类型的程序十分类似,只是获取内存地址并设为可寻址的 Elem() 方法改为 Index(i int) 方法

需要注意的是,在获取目标类型指针对应的 Value 对象时,我们需要区分:

  • slice 本身持有数组的指针,所以无需通过 & 运算获取地址
  • 对于数组来说,& 运算符获取数组的地址是必须的

 

 

 

打印出了:

new aVal[0] is: 13

 

设置可寻址的结构体字段

对于结构体,我们必须要指定需要设置的字段,Value 类型提供了 FieldByName 方法用来实现这个功能

 

 

打印出了:

student is: {1 Nico 99}