【发布时间】:2021-07-19 10:51:52
【问题描述】:
我想遍历一个结构并使用反射修改字段值。如何设置?
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.Value.Set using unaddressable value
【问题讨论】:
标签: go reflection