反射修改值
概念说明
通过反射修改变量时,必须拿到可设置的值。
直接把普通变量传给 reflect.ValueOf,得到的是一份不可设置的反射值。
正确做法是传入指针,再通过 Elem() 找到指针指向的变量。
语法/规则
- 修改值时要传入指针,例如
reflect.ValueOf(&name)。 - 使用
Elem()获取指针指向的实际值。 - 使用
CanSet()判断是否可修改。 - 根据 Kind 选择
SetString、SetInt等方法。 - 设置值的类型必须匹配。
修改字符串变量示例
| |
输出结果:
| |
常见错误
- 传入普通变量而不是指针,导致反射值不可设置。
- 忘记调用
Elem(),实际拿到的是指针本身。 - 使用
SetString修改非字符串类型,导致 panic。 - 修改前不检查
CanSet(),问题发生时不容易定位。