我需要遍历结构类型的所有字段并检查它们是否实现了给定的接口。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{})公司和用户都实现了模型;我得到 f.Type.Implements(ModelType) 为 User 结构的 Company 字段返回 false 。这是出乎意料的,所以,我在这里做错了什么?
2 回答

倚天杖
TA贡献1828条经验 获得超3个赞
有一种更简单的方法不需要反射。例如:
type middlewarer interface {Middleware() negroni.Handler}
for _, controller := range ctrls {
if m, ok := interface{}(controller).(middlewarer); ok {
n.Use(m.Middleware())
}
}
仅在实现中间件接口的切片元素中调用 Middleware() 方法。
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消