【发布时间】:2020-08-04 10:48:44
【问题描述】:
我有结构
type ChartOpts struct {
Name mypakage.MyType
Repo mypakage.MyType
}
我想迭代其字段,如果满足类型断言,则调用该(断言)类型的方法。
func (chartOpts ChartOpts) BindFlags(cobCom *cobra.Command) {
fields := reflect.TypeOf(chartOpts)
values := reflect.ValueOf(chartOpts)
num := fields.NumField()
fmt.Println(fields, values, num)
for i := 0; i < num; i++ {
field := fields.Field(i)
switch v := field.Type.(type) {
case mypackage.MyType:
field.BindPersistentFlag(cobCom)
default:
log.Fatal(ErrUnhandledType)
}
}
}
上面的代码没有编译,出现这个错误:
field.BindPersistentFlag undefined (type reflect.StructField has no field or method BindPersistentFlag)
为什么?
【问题讨论】:
-
field是 reflect.StructField 类型,它没有BindPersistentFlag方法,原因很明显。
标签: go methods struct reflection type-switch