From 38ccde2c37fe65cff65baa8f5d78f7020a3e3112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 30 Oct 2025 19:42:25 +0800 Subject: [PATCH] save code --- logger/define.go | 17 +++++++++++++++++ logger/instance.go | 22 ++++++++++++++++++++++ router/common_param.go | 30 +++++++++++++++++++++++++++++- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 logger/define.go create mode 100644 logger/instance.go diff --git a/logger/define.go b/logger/define.go new file mode 100644 index 0000000..cc62753 --- /dev/null +++ b/logger/define.go @@ -0,0 +1,17 @@ +// Package logger ... +// +// Description : logger ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-10-30 16:56 +package logger + +// Data 日志数据 +type Data struct { + TraceID string `json:"trace_id" dc:"trace_id"` + RequestID string `json:"request_id" dc:"请求ID"` + UserID any `json:"user_id" dc:"用户IP"` + Hostname string `json:"hostname" dc:"服务器主机名称"` + HostIp string `json:"host_ip" dc:"主机IP"` +} diff --git a/logger/instance.go b/logger/instance.go new file mode 100644 index 0000000..94be1da --- /dev/null +++ b/logger/instance.go @@ -0,0 +1,22 @@ +// Package logger ... +// +// Description : logger ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-10-30 16:54 +package logger + +import "go.uber.org/zap" + +var ( + Instance *zap.Logger = zap.NewNop() +) + +// SetInstance 设置日志实例 +func SetInstance(l *zap.Logger) { + if nil == l { + return + } + Instance = l +} diff --git a/router/common_param.go b/router/common_param.go index 506925a..d23004d 100644 --- a/router/common_param.go +++ b/router/common_param.go @@ -7,7 +7,12 @@ // Date : 2025-10-30 15:39 package router -import "github.com/gin-gonic/gin" +import ( + "reflect" + + "git.zhangdeman.cn/zhangdeman/gin/logger" + "github.com/gin-gonic/gin" +) // GetCommonParam 获取公共参数 type GetCommonParam func(ctx *gin.Context) (any, error) @@ -23,3 +28,26 @@ func (s *server) AddCommonParamRules(rules map[string]GetCommonParam) { s.AddCommonParamRule(fieldName, rule) } } + +// injectCommonParam 注入公共参数 +func (s *server) injectCommonParam(ctx *gin.Context, formValue any) error { + reflectType := reflect.TypeOf(formValue) + fieldTable := map[string]bool{} + fieldNum := reflectType.Elem().NumField() + for i := 0; i < fieldNum; i++ { + // 提取全部结构体字段 + fieldTable[reflectType.Elem().Field(i).Name] = true + } + reflectValue := reflect.ValueOf(formValue) + for fieldName, getParamFunc := range s.commonParam { + if _, ok := fieldTable[fieldName]; !ok { + // 结构体字段未配置自动注入 + continue + } + if val, err := getParamFunc(ctx); nil != err { + logger.Instance.Error("inject common param failed") + return err + } + reflectValue.Elem().FieldByName(fieldName) + } +}