From ac6c707e29c08246d737c06bd35f3c1cad126814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 26 Dec 2025 11:35:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20meta=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE=E6=9C=80=E5=A4=A7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=89=A7=E8=A1=8C=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/controller.go | 10 ++++++++++ router/define.go | 2 ++ 2 files changed, 12 insertions(+) diff --git a/router/controller.go b/router/controller.go index fae87fe..3ef4d1d 100644 --- a/router/controller.go +++ b/router/controller.go @@ -10,6 +10,8 @@ package router import ( "reflect" "strings" + + "git.zhangdeman.cn/zhangdeman/util" ) // controller 解析controller有哪些方法要注册为接口 @@ -132,4 +134,12 @@ func (c controller) setUriMeta(metaField reflect.StructField, cfg *UriConfig) { cfg.IsWebsocket = boolMetaParse(TagNameIsWebsocket) // 是否是 websocket 接口 cfg.IsSse = boolMetaParse(TagNameIsSse) // 是否是 sse 接口 cfg.NoLogin = boolMetaParse(TagNameNoLogin) // 是否需要登录 + + // 最大执行时间 + cfg.MaxExecTime = uint(0) + if tagVal := strings.ToLower(metaField.Tag.Get(TagNameMaxExecTime)); tagVal != "" { + if err := util.ConvertAssign(&cfg.MaxExecTime, tagVal); nil != err { + panic(cfg.Path + " : 最大执行时间配置错误(配置的值必须是无符号整型), 请检查配置 : " + err.Error()) + } + } } diff --git a/router/define.go b/router/define.go index d9ccbdc..42a7b9d 100644 --- a/router/define.go +++ b/router/define.go @@ -29,6 +29,7 @@ const ( TagNameOutputStrict = "output_strict" // 接口数据是否为严格模式 : 严格模式, 响应数据必须是结构体/map,非严格模式返回任意值 TagNameHookSync = "hook-sync" // hook 同步执行 TagNameNoLogin = "no-login" // 接口是否需要登录(无需登录, 则有token就验证, 无token不验证) + TagNameMaxExecTime = "max-exec-time" // 接口最大执行时间, 单位: s, 配置为0则不验证 TagNameBinding = "binding" // gin 内置的验证规则tag TagNameValidate = "validate" // validator v10 默认的验证规则tag TagNameErrMsg = "err" // 验证失败错误信息 tag @@ -43,6 +44,7 @@ type UriConfig struct { IsSse bool `json:"is_sse"` // 是否 SSE 连接 IsWebsocket bool `json:"is_ws"` // 是否 websocket 连接 OutputStrict bool `json:"output_strict"` // 接口是否为严格模式 : 不配置,可返回任意类型, 配置, 必须返回结构体或者map + MaxExecTime uint `json:"max_exec_time"` // 接口最大执行时间, 单位: ms, 配置为0则不验证, 注意, 超时后不会报错, 会打印一条warn日志, 如果配置了报警策略, 也会发送报警信息 HookSync bool `json:"hook_sync"` // 接口主逻辑执行完成之后,hook是否同步执行, 默认异步执行 NoLogin bool `json:"no_login"` // 接口是否需要登录(无需登录, 则有token就验证, 无token不验证) FormDataType reflect.Type `json:"-"` // 表单数据类型