为了账号安全,请及时绑定邮箱和手机立即绑定

使用反射和循环修改结构值

使用反射和循环修改结构值

Go
莫回无 2022-08-24 19:04:36
我想遍历一个结构并使用反射修改字段值。如何设置?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))


    }

}


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号