公共参数自动注入, 增加参数是否已赋值检测 #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
 | 
					// Date : 2025-10-30 15:39
 | 
				
			||||||
package router
 | 
					package router
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "github.com/gin-gonic/gin"
 | 
					import (
 | 
				
			||||||
 | 
						"reflect"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.zhangdeman.cn/zhangdeman/gin/logger"
 | 
				
			||||||
 | 
						"github.com/gin-gonic/gin"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetCommonParam 获取公共参数
 | 
					// GetCommonParam 获取公共参数
 | 
				
			||||||
type GetCommonParam func(ctx *gin.Context) (any, error)
 | 
					type GetCommonParam func(ctx *gin.Context) (any, error)
 | 
				
			||||||
@ -23,3 +28,26 @@ func (s *server) AddCommonParamRules(rules map[string]GetCommonParam) {
 | 
				
			|||||||
		s.AddCommonParamRule(fieldName, rule)
 | 
							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