请参阅:http://play.golang.org/p/GDCasRwYOp
我需要根据结构字段的类型来做事。
当字段是接口类型时,以下内容不起作用。
我想我知道为什么这不起作用。但是有办法做我想做的事吗?
{{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())
}
}
}