公共参数自动注入, 增加参数是否已赋值检测 #18
							
								
								
									
										17
									
								
								logger/define.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								logger/define.go
									
									
									
									
									
										Normal file
									
								
							@ -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"`
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								logger/instance.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								logger/instance.go
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
}
 | 
			
		||||
@ -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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user