This commit is contained in:
2025-07-07 20:11:59 +08:00
parent ab0fdbc447
commit 06e3aa2eb3
2009 changed files with 193082 additions and 0 deletions

View File

@ -0,0 +1,36 @@
/*
* @desc:路由处理
* @company:云南奇讯科技有限公司
* @Author: yixiaohu<yxh669@qq.com>
* @Date: 2022/11/16 11:09
*/
package libRouter
import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/text/gregex"
"reflect"
)
// RouterAutoBind 收集需要被绑定的控制器,自动绑定
// 路由的方法命名规则必须为BindXXXController
func RouterAutoBind(ctx context.Context, R interface{}, group *ghttp.RouterGroup) (err error) {
//TypeOf会返回目标数据的类型比如int/float/struct/指针等
typ := reflect.TypeOf(R)
//ValueOf返回目标数据的的值
val := reflect.ValueOf(R)
if val.Elem().Kind() != reflect.Struct {
err = gerror.New("expect struct but a " + val.Elem().Kind().String())
return
}
for i := 0; i < typ.NumMethod(); i++ {
if match := gregex.IsMatchString(`^Bind(.+)Controller$`, typ.Method(i).Name); match {
//调用绑定方法
val.Method(i).Call([]reflect.Value{reflect.ValueOf(ctx), reflect.ValueOf(group)})
}
}
return
}