Go 反射后调用接口方法&;戈兰的类型转换
我有一个结构Go 反射后调用接口方法&;戈兰的类型转换,go,methods,struct,reflection,type-switch,Go,Methods,Struct,Reflection,Type Switch,我有一个结构 type ChartOpts struct { Name mypakage.MyType Repo mypakage.MyType } 我希望迭代其字段,如果满足类型断言,则调用该(断言的)类型上的方法 为什么?您需要使用该值并从反射中恢复接口: values.Field(i).Interface().(Type).Method() 在您的情况下,切换接口会更简单: switch v := values.Fie
type ChartOpts struct {
Name mypakage.MyType
Repo mypakage.MyType
}
我希望迭代其字段,如果满足类型断言,则调用该(断言的)类型上的方法
为什么?您需要使用该值并从反射中恢复接口:
values.Field(i).Interface().(Type).Method()
在您的情况下,切换接口会更简单:
switch v := values.Field(i).Interface().(type) {
case Type:
v.Method()
...
字段
是类型,它不是字段的值,而是其结构字段描述符
您需要在字段的值上键入switch:
values.Field(i)
请注意,上面是包装在中的字段值,因此使用以下内容提取值:
i:=0的;i
并在
v
上调用BindPersistentFlag()
,因为这将是类型mypackage.MyType
在案例中字段
是类型reflect.StructField,它没有方法BindPersistentFlag
以获得明显的原因。
switch v := values.Field(i).Interface().(type) {
case Type:
v.Method()
...
values.Field(i)
for i := 0; i < num; i++ {
switch v := values.Field(i).Interface().(type) {
case mypackage.MyType:
v.BindPersistentFlag(cobCom)
default:
log.Fatal(ErrUnhandledType)
}
}