我想遍历一个结构并使用反射修改字段值。如何设置?func main() { x := struct { Foo string Bar int }{"foo", 2} StructCheck(Checker, x)}func Checker(s interface{}) interface{} { log.Println(s) return s}func StructCheck(check func(interface{}) interface{}, x interface{}) interface{} { v := reflect.ValueOf(x) for i := 0; i < v.NumField(); i++ { r := check(v.Field(i)) w := reflect.ValueOf(&r).Elem() log.Println(w.Type(), w.CanSet()) // v.Field(i).Set(reflect.ValueOf(w)) } return v}运行 Set() 会导致紧急并显示 :reflect。值。使用不可寻址值进行设置
1 回答

MYYA
TA贡献1868条经验 获得超4个赞
必须将可寻址值传递给函数。
StructCheck(Checker, &x)
有
取消引用结构检查中的值:
v := reflect.ValueOf(x).Elem() // Elem() gets value of ptr
还有其他一些问题。以下是更新的代码:
func StructCheck(check func(interface{}) interface{}, x interface{}) {
v := reflect.ValueOf(x).Elem()
for i := 0; i < v.NumField(); i++ {
r := check(v.Field(i).Interface())
v.Field(i).Set(reflect.ValueOf(r))
}
}
- 1 回答
- 0 关注
- 59 浏览
添加回答
举报
0/150
提交
取消