diff --git a/go.mod b/go.mod index 06a9796..6c89395 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.24.2 require ( git.zhangdeman.cn/zhangdeman/api-doc v1.0.3-0.20251013152001-868ee8955623 - git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251217031322-9e8b61fd5156 + git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251226040044-6bc8da22219a git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20251013092857-dcf591d4e8a8 git.zhangdeman.cn/zhangdeman/exception v0.0.0-20250510123912-a0d52fc093ab git.zhangdeman.cn/zhangdeman/graceful v0.0.0-20250529070945-92833db6f3a4 diff --git a/go.sum b/go.sum index 5f50290..bcec335 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251101092813-3dd9fb807f1c h1:H0Tlh7 git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251101092813-3dd9fb807f1c/go.mod h1:5p8CEKGBxi7qPtTXDI3HDmqKAfIm5i/aBWdrbkbdNjc= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251217031322-9e8b61fd5156 h1:VaaejWXKShnuySe0o2twIBMkWc8bJ+Fw654KLKjoXW8= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251217031322-9e8b61fd5156/go.mod h1:5p8CEKGBxi7qPtTXDI3HDmqKAfIm5i/aBWdrbkbdNjc= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251226040044-6bc8da22219a h1:p85je5ExTyUsd2jR+Lq2rSJneAPM3MkuUhFHH+TfhEM= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20251226040044-6bc8da22219a/go.mod h1:5p8CEKGBxi7qPtTXDI3HDmqKAfIm5i/aBWdrbkbdNjc= git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20251013092857-dcf591d4e8a8 h1:Pw981jG3hH9ZHrB3s1xPpsZafgX3USuMAjnGi2GEP9Y= git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20251013092857-dcf591d4e8a8/go.mod h1:xtCw3om5DRrG30EfQd/lfQPXgptfK7l9oBSt4Kdhjok= git.zhangdeman.cn/zhangdeman/easylock v0.0.0-20230731062340-983985c12eda h1:bMD6r9gjRy7cO+T4zRQVYAesgIblBdTnhzT1vN5wjvI= diff --git a/logger/instance.go b/logger/instance.go index cfbd258..5a97bd7 100644 --- a/logger/instance.go +++ b/logger/instance.go @@ -24,7 +24,7 @@ func init() { cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder logger, err := cfg.Build() if err != nil { - panic("init logger error") + panic("init logger error: " + err.Error()) } Instance = logger.Sugar().Desugar() } diff --git a/middleware/hook_after_response.go b/middleware/hook_after_response.go index f1487a4..6b88cf3 100644 --- a/middleware/hook_after_response.go +++ b/middleware/hook_after_response.go @@ -32,7 +32,7 @@ func HookAfterResponseMiddleware(hookFunc HookFunc) gin.HandlerFunc { ctx, []byte(ctx.GetString(handleConfig.RecordRequestDataField)), ctx.GetStringMap(handleConfig.RecordResponseDataField), - request.WrapperHandle.GetCtxIntData(ctx, handleConfig.StartRequestTimeField, 0)-request.WrapperHandle.GetCtxIntData(ctx, handleConfig.StartRequestTimeField, 0), + request.WrapperHandle.GetCtxIntData(ctx, handleConfig.FinishRequestTimeField, 0)-request.WrapperHandle.GetCtxIntData(ctx, handleConfig.StartRequestTimeField, 0), ) } } diff --git a/request/form.go b/request/form.go index 89158ba..0a401e1 100644 --- a/request/form.go +++ b/request/form.go @@ -10,11 +10,13 @@ package request import ( "bytes" "errors" - "github.com/mcuadros/go-defaults" "io" "net/http" "strings" + "git.zhangdeman.cn/zhangdeman/wrapper/op_array" + "github.com/mcuadros/go-defaults" + "github.com/go-playground/validator/v10" "git.zhangdeman.cn/zhangdeman/gin/define" @@ -44,11 +46,9 @@ func (f *form) Parse(ctx *gin.Context, receiver interface{}) error { // 因为请求体被读一遍之后就没了,重新赋值 requestBody ctx.Request.Body = io.NopCloser(bytes.NewReader(requestBody)) method := strings.ToUpper(ctx.Request.Method) - if method == http.MethodGet || - method == http.MethodPatch || - method == http.MethodTrace || - method == http.MethodConnect || - method == http.MethodOptions { + if op_array.ArrayType([]string{ + http.MethodGet, http.MethodPatch, http.MethodTrace, http.MethodConnect, http.MethodOptions, + }).Has(method) >= 0 { if err := ctx.ShouldBindQuery(receiver); nil != err { return err } diff --git a/router/controller.go b/router/controller.go index 3ef4d1d..b6c1adb 100644 --- a/router/controller.go +++ b/router/controller.go @@ -81,8 +81,6 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n return } cfg.ResultDataType = methodType.Out(0) - if cfg.ResultDataType == nil { - } if methodType.Out(1).Kind().String() != ErrorType { // 判断是否是实现 error接口的方法 outputErrParse := false @@ -106,7 +104,6 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n // 开启输出严格模式校验 if methodType.Out(0).Kind() != reflect.Struct && methodType.Out(0).Kind() != reflect.Map { panic(cfg.Path + " : 接口配置输出严格校验, 输出数据类型必须为 struct 或 *struct 或 map, 实际返回数据类型 : " + methodType.Out(0).Kind().String()) - return } } diff --git a/router/handler.go b/router/handler.go index 19df456..47473bb 100644 --- a/router/handler.go +++ b/router/handler.go @@ -115,6 +115,5 @@ func (s *server) RequestHandler(uriCfg UriConfig) gin.HandlerFunc { response.SendWithException(ctx, e, &define.ResponseOption{ ContentType: consts.MimeTypeJson, }) - return } } diff --git a/router/hook.go b/router/hook.go index 470999b..c1fe960 100644 --- a/router/hook.go +++ b/router/hook.go @@ -18,19 +18,23 @@ import ( // hook 执行hook逻辑 func (s *server) hook(ctx *gin.Context, uriCfg UriConfig) { - responseAfter, exist := ctx.Get(consts.GinLogicAfterResponseKey) + var ( + exists bool + isSuccess any + responseAfter any + ) + innerContext := util.GinCtxToContext(ctx) - if !exist || nil != responseAfter { + if responseAfter, exists = ctx.Get(consts.GinLogicAfterResponseKey); !exists || nil != responseAfter { // 未配置 - logger.Instance.Debug("未配置Logic执行后的hook逻辑", pkgLogger.NewLogData(innerContext, logger.RecordType, logger.CodeLogicHook, map[string]any{ + logger.Instance.Debug("未配置 Logic 执行后的 hook 逻辑", pkgLogger.NewLogData(innerContext, logger.RecordType, logger.CodeLogicHook, map[string]any{ "uri": uriCfg.Path, "logic_after_response_key": consts.GinLogicAfterResponseKey, }).ToFieldList()...) return } - isSuccess, exist := ctx.Get(consts.GinRequestSuccess) success := false - if nil != isSuccess && (isSuccess == "1" || isSuccess == "true" || isSuccess.(bool)) { + if isSuccess, exists = ctx.Get(consts.GinRequestSuccess); exists && nil != isSuccess && (isSuccess == "1" || isSuccess == "true" || isSuccess.(bool)) { success = true } hookInstance := responseAfter.(*define.LogicAfterResponse) @@ -47,14 +51,12 @@ func (s *server) hookAfter(ctx *gin.Context, uriCfg UriConfig, hookInstance *def innerContext := util.GinCtxToContext(ctx) defer func() { if err := recover(); err != nil { - logger.Instance.Error("hook执行异常", pkgLogger.NewLogData(innerContext, logger.RecordType, logger.CodeLogicHook, map[string]any{ + logger.Instance.Error("hook 执行异常", pkgLogger.NewLogData(innerContext, logger.RecordType, logger.CodeLogicHook, map[string]any{ "uri": uriCfg.Path, "logic_after_response_key": consts.GinLogicAfterResponseKey, "error": err.(error).Error(), "logic_success": success, }).ToFieldList()...) - } else { - } }() if success { diff --git a/router/server.go b/router/server.go index 3ceecfc..65d19f7 100644 --- a/router/server.go +++ b/router/server.go @@ -77,10 +77,6 @@ func NewServer(port int, optionList ...SetServerOptionFunc) *server { if !option.disableInitRequest { // 启用了初始化请求 globalMiddlewareList = append(globalMiddlewareList, middleware.InitRequest()) // 初始化请求 } - // CustomContext 必须在第一个, 并且进行初始化 - globalMiddlewareList = append( - globalMiddlewareList, - ) if nil != option.loggerCfg { // 请求日志记录中间件 globalMiddlewareList = append(globalMiddlewareList, middleware.LogRequest(option.loggerCfg))