288_尚硅谷_反射的注意事项和细节(2)

1.反射注意事项和细节说明1.反射注意事项和细节说明

2.5) 通过反射来修改变量, 注意当使用 SetXxx 方法来设置需要通过对应的指针类型来完成, 这样才能改变传入的变量的值, 同时需要使用到reflect.Value.Elem() 方法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()

posted on 2026-03-09 13:33  与太阳肩并肩  阅读(1)  评论(0)    收藏  举报

导航