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)
    }
}