duanmen1887 2019-08-23 09:42 采纳率: 0%
浏览 45

设置结构字段,它是使用反射的指针

My question is like this one but with a slight difference that my value is an interface{}.

Let assume we have a struct like this:

type User struct {
    ID         int
    Email      string
    ResourceID *int
}

and a function that sets values of input struct.

func setFieldValue(s interface{}, fieldName string, value interface{}) {
    v := reflect.ValueOf(s).Elem()
    fieldVal := v.FieldByName(fieldName)

    if fieldVal.Kind() == reflect.Ptr {
        // Here is the problem
        fieldVal.Set(reflect.ValueOf(&value))
    } else {
        fieldVal.Set(reflect.ValueOf(value))
    }
}

It is obvious that if I run the code I get the following error:

panic: reflect.Set: value of type *interface {} is not assignable to type *int

here is the code in playground: https://play.golang.org/p/VUoyRras8SD

What should I do to fix this?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 制裁名单20240508芯片厂商
    • ¥20 易康econgnition精度验证
    • ¥15 msix packaging tool打包问题
    • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
    • ¥15 python的qt5界面
    • ¥15 无线电能传输系统MATLAB仿真问题
    • ¥50 如何用脚本实现输入法的热键设置
    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致