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) + } +}