我有结构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
这是一个具有字段的结构类型。
- 1 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消