288_尚硅谷_反射的注意事项和细节(2)
1.反射注意事项和细节说明
2.5) 通过反射来修改变量, 注意当使用 SetXxx 方法来设置需要通过对应的指针类型来完成, 这样才能改变传入的变量的值, 同时需要使用到reflect.Value.Elem() 方法
package main
import (
"fmt"
"reflect"
)
// todo * 5) 通过反射来修改变量, 注意当使用 SetXxx 方法来设置需要通过对应的指针类型来完成, 这样才能改变传入的变量的值, 同时需要使用到reflect.Value.Elem() 方法
// 通过反射,修改
// num int 的值
// 修改 student的值
func reflect01(b interface{}) {
// * 2. 获取到 reflect.Value【反射值】, 使用reflect.ValueOf()方法
rVal := reflect.ValueOf(b)
// 看下 rVal的kind是
fmt.Printf("指针类型 rVal kind= %v\n", rVal.Kind())
// * 3. rVal.Elem()方法是获得指针类型的反射值
// ! .Elem()返回v所持有的接口保管的值的Value封装, 或者v持有的指针指向的值的Value的封装
rVal.Elem().SetInt(20)
}
func main() {
var num int = 10
reflect01(&num)
fmt.Printf("num= %v", num)
// * 理解rVal.Elem().SetInt(20), 等价于如下代码:
// num := 9
// ptr * int = &num
// num2 := *ptr // 类似rVal.Elem()
浙公网安备 33010602011771号