drdr123456 2014-07-22 06:53
浏览 55
已采纳

使用反射设置指向字段的指针

i have the following struct, and need some of the fields to be nulluble so i use pointers, mainly to handle sql nulls

type Chicken struct{
    Id                int         //Not nullable
    Name              *string     //can be null
    AvgMonthlyEggs    *float32    //can be null
    BirthDate         *time.Time  //can be null
}

so when i do the following i can see that the json result can have nulls for value types which is what i want

stringValue:="xx"
chicken := &Chicken{1,&stringValue,nil,nil}
chickenJson,_ := json.Marshal(&chicken)
fmt.Println(string(chickenJson))

but when i try to do it all using reflection

    var chickenPtr *Chicken
    itemTyp := reflect.TypeOf(chickenPtr).Elem()
    item  := reflect.New(itemTyp)
    item.Elem().FieldByName("Id").SetInt(1)
    //the problem is here not sure how to set the pointer to the field
    item.Elem().FieldByName("Name").Set(&stringValue) //Error caused by this line
    itemJson,_ := json.Marshal(item.Interface())
    fmt.Println(string(itemJson))

what i get from the reflection part is the following error

cannot use &stringValue (type *string) as type reflect.Value in argument to item.Elem().FieldByName("Name").Set

what am i doing wrong?

here is a GoPlay http://play.golang.org/p/0xt45uHoUn

  • 写回答

1条回答 默认 最新

  • douzhi3105 2014-07-22 07:06
    关注

    reflect.Value.Set only accepts reflect.Value as an argument. Use reflect.ValueOf on your stringValue:

    item.Elem().FieldByName("Name").Set(reflect.ValueOf(&stringValue))
    

    Playground: http://play.golang.org/p/DNxsbCsKZA.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥45 字符串操作——数组越界问题
  • ¥15 Loss下降到0.08时不在下降调整学习率也没用
  • ¥30 怎么把PCK、OKS指标添加到yolov11中
  • ¥15 QT+FFmpeg使用GPU加速解码
  • ¥15 为什么投影机用酷喵播放电影放一段时间就播放不下去了?提示发生未知故障,有什么解决办法吗?
  • ¥15 来个会搭建付费网站的有偿
  • ¥100 有能够实现人机模式的c/c++代码,有图片背景等,能够直接进行游戏
  • ¥20 校园网认证openwrt插件
  • ¥15 以AT89C51单片机芯片为核心来制作一个简易计算器,外部由4*4矩阵键盘和一个LCD1602字符型液晶显示屏构成,内部由一块AT89C51单片机构成,通过软件编程可实现简单加减乘除。
  • ¥15 求GCMS辅导数据分析
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部