见:http : //play.golang.org/p/GDCasRwYOp我需要根据结构字段的类型做一些事情。当字段为接口类型时,以下内容不起作用。我想我明白为什么这不起作用。但是有没有办法做我想做的事?package mainimport ( "fmt" "reflect")type TT struct { Foo int}type II interface { Bar(int) (int, error)}type SS struct { F1 TT F2 II}func main() { var rr SS value := reflect.ValueOf(rr) for ii := 0; ii < value.NumField(); ii++ { fv := value.Field(ii) xv := fv.Interface() switch vv := xv.(type) { default: fmt.Printf("??: vv=%T,%v\n", vv, vv) case TT: fmt.Printf("TT: vv=%T,%v\n", vv, vv) case II: fmt.Printf("II: vv=%T,%v\n", vv, vv) } }}
1 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
也许这会让你去你想去的地方?
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())
}
}
}
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消