为了账号安全,请及时绑定邮箱和手机立即绑定

检查结构是否实现了给定的接口

检查结构是否实现了给定的接口

Go
aluckdog 2021-06-23 17:18:06
我需要遍历结构类型的所有字段并检查它们是否实现了给定的接口。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() 方法。


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号