竹简文档
初始化

引擎初始化

EngineInit 创建并配置 Gin 引擎,注册内置中间件和验证器

引擎初始化

EngineInit 方法创建并配置 Gin 引擎,注册内置中间件和自定义验证器。

EngineInit

register_gin.go
func (r *Reg) EngineInit()

实现细节

register_gin.go
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=trueDebug输出详细调试信息
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")

下一步

On this page