如何在struct字段上使用类型切换(当字段是接口类型时)?

时间:2015-11-01 01:07:08

标签: go interface type-switch

请参阅:http://play.golang.org/p/GDCasRwYOp

我需要根据结构字段的类型来做事。

当字段是接口类型时,以下内容不起作用。

我想我知道为什么这不起作用。但是有办法做我想做的事吗?

{{1}}

1 个答案:

答案 0 :(得分:2)

也许这会让你到达你想去的地方?

func main() {
    var rr SS
    typ := reflect.TypeOf(rr)
    TTType := reflect.TypeOf(TT{})
    IIType := reflect.TypeOf((*II)(nil)).Elem() // Yes, this is ugly.

    for ii := 0; ii < typ.NumField(); ii++ {
        fv := typ.Field(ii)
        ft := fv.Type
        switch {   
        case ft == TTType:
            fmt.Printf("TT: %s\n", ft.Name())
        case ft.Implements(IIType):
            fmt.Printf("II: %s\n", ft.Name())
        default:
            fmt.Printf("??: %s %s\n", ft.Kind(), ft.Name())
        }
    }
}