初始化
引擎初始化
EngineInit 创建并配置 Gin 引擎,注册内置中间件和验证器
引擎初始化
EngineInit 方法创建并配置 Gin 引擎,注册内置中间件和自定义验证器。
EngineInit
func (r *Reg) EngineInit()实现细节
func (r *Reg) EngineInit() {
log := xLog.WithName(xLog.NamedINIT)
log.Debug(r.Context, "初始化 GIN 引擎")
if !isDebugMode() {
gin.SetMode(gin.ReleaseMode)
}
r.Serve = gin.New(func(engine *gin.Engine) {
engine.Use(xHelper.RequestContext())
engine.Use(xHelper.PanicRecovery())
engine.Use(xHelper.HttpLogger())
})
// 注册自定义验证器和翻译器
if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
// 注册翻译器(必须在自定义验证器之前)
if err := xVaild.RegisterTranslator(v); err != nil {
log.Error(r.Context, "翻译器注册失败: "+err.Error())
} else {
log.Info(r.Context, "翻译器注册成功")
}
// 注册自定义验证器
if err := xVaild.RegisterCustomValidators(v); err != nil {
log.Error(r.Context, "验证器注册失败: "+err.Error())
} else {
log.Info(r.Context, "预制内部验证器注册成功")
}
}
}内置中间件
| 中间件 | 说明 |
|---|---|
xHelper.RequestContext() | 请求上下文处理,生成请求 ID 等 |
xHelper.PanicRecovery() | Panic 恢复,防止单个请求崩溃影响整个服务 |
xHelper.HttpLogger() | HTTP 请求日志记录 |
运行模式
根据 DEBUG 环境变量自动切换 Gin 运行模式:
| 环境变量 | Gin 模式 | 说明 |
|---|---|---|
DEBUG=true | Debug | 输出详细调试信息 |
DEBUG=false 或未设置 | Release | 生产模式,关闭调试输出 |
验证器
翻译器
注册中文翻译器,将验证错误信息翻译为中文:
type CreateUserReq struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
}
// 验证失败时返回中文错误信息
// "Name 为必填字段"
// "Email 必须是有效的邮箱地址"自定义验证器
框架预置了常用的自定义验证器:
type CreateUserReq struct {
Phone string `json:"phone" binding:"required,phone"` // 手机号验证
IDCard string `json:"id_card" binding:"required,idcard"` // 身份证验证
}使用引擎
初始化完成后,通过 reg.Serve 访问 Gin 引擎:
reg := xReg.Register()
// 注册路由
reg.Serve.GET("/api/users", userHandler.List)
reg.Serve.POST("/api/users", userHandler.Create)
reg.Serve.PUT("/api/users/:id", userHandler.Update)
// 路由分组
api := reg.Serve.Group("/api/v1")
{
api.GET("/products", productHandler.List)
api.POST("/orders", orderHandler.Create)
}
// 启动服务
reg.Serve.Run(":8080")