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

在指针接收器上调用 Elem() 方法以进行结构反射的必要性

在指针接收器上调用 Elem() 方法以进行结构反射的必要性

Go
慕田峪4524236 2022-06-21 16:16:56
我有结构type ChartOpts struct {    Name              mypakage.MyType    Repo              mypakage.MyType}我想在其上设置一个反射接收器。func (chartOpts *ChartOpts) BindFlags() {    fields := reflect.TypeOf(chartOpts)    values := reflect.ValueOf(chartOpts)    num := fields.NumField()    fmt.Println(fields, values, num)}上面的代码恐慌panic: reflect: NumField of non-struct type *app.ChartOpts为什么我需要调用该Elem()方法来解决这个问题?func (chartOpts *ChartOpts) BindFlags() {    fields := reflect.TypeOf(chartOpts)    values := reflect.ValueOf(chartOpts)    num := fields.Elem().NumField()    fmt.Println(fields, values, num)}
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

因为 type ofchartOpts*ChartOpts一个指向ChartOpts类型的指针。指针没有字段,只有结构。调用Elem()其类型描述符将返回一个表示 / 描述的类型描述符,ChartOpts这是一个具有字段的结构类型。



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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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