【发布时间】:2013-09-05 09:30:02
【问题描述】:
我需要遍历结构类型的所有字段并检查它们是否实现了给定的接口。
type Model interface {...}
func HasModels(m Model) {
s := reflect.ValueOf(m).Elem()
t := s.Type()
modelType := reflect.TypeOf((*Model)(nil)).Elem()
for i := 0; i < s.NumField(); i++ {
f := t.Field(i)
fmt.Printf("%d: %s %s -> %s\n", i, f.Name, f.Type, f.Type.Implements(modelType))
}
}
然后,如果调用 HasModels 具有这样的结构:
type Company struct {...}
type User struct {
...
Company Company
}
HasModels(&User{})
Company 和 User 都实现了 Model;我得到 f.Type.Implements(ModelType) 为 User 结构的 Company 字段返回 false。
这是出乎意料的,所以,我在这里做错了什么?
【问题讨论】:
标签: reflection go