Ai
1 Star 0 Fork 0

csingo/cController

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Init.go 1.65 KB
一键复制 编辑 原始数据 按行查看 历史
cxy1620541673 提交于 2025-04-07 17:48 +08:00 . update
package cController
import (
"net/http"
"reflect"
"runtime"
"strings"
"github.com/gin-gonic/gin"
"gitee.com/csingo/cLog"
)
type RouteHandlerFunc func() (app string, name string, method string)
func GetGinHandlerFunc(app, name, method string, handler RouteHandlerFunc) (gin.HandlerFunc, error) {
var result gin.HandlerFunc
var err error
if handler != nil {
app, name, method = handler()
}
index := app + "." + name
instance := container.Get(index)
if instance == nil {
cLog.WithContext(nil, map[string]any{
"source": "cController.GetGinHandlerFunc",
"app": app,
"name": name,
"method": method,
}).Fatalln("获取 controller 异常")
}
instanceMethod := reflect.ValueOf(instance).MethodByName(method)
if !instanceMethod.IsValid() || instanceMethod.IsNil() {
cLog.WithContext(nil, map[string]any{
"source": "cController.GetGinHandlerFunc",
"app": app,
"name": name,
"method": method,
}).Fatalln("获取 controller method 异常")
}
f := instanceMethod.Interface().(func(*gin.Context) error)
result = func(ctx *gin.Context) {
if e := f(ctx); e != nil && !ctx.IsAborted() {
ctx.AbortWithStatus(http.StatusInternalServerError)
}
}
return result, err
}
func RouteHandler[T ControllerInterface](handler func(T, *gin.Context) error) RouteHandlerFunc {
methodValue := reflect.ValueOf(handler)
v := methodValue.Pointer()
name := runtime.FuncForPC(v).Name()
parts := strings.Split(name, ".")
methodPart := parts[len(parts)-1]
method := strings.TrimSuffix(methodPart, "-fm")
instance := new(T)
app, name := (*instance).ControllerName()
return func() (string, string, string) {
return app, name, method
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/csingo/cController.git
git@gitee.com:csingo/cController.git
csingo
cController
cController
v0.4.4

搜索帮助