Go语言Web开发框架之路由、中间件、参数校验实践记录

作者:

文章目录
  • Gin 支持从多种来源绑定参数,包括: 来源 方法 URL 参数 c.Param("xxx") Query 参数 c.Query("xxx") Form 表单 c.PostForm("xxx") JSON c.ShouldBindJSON(&obj)
  • var validate *validator.Validate func main() { validate = validator.New() validate.RegisterValidation(“username_available”, checkUsernameAvailable) } func checkUsernameAvailable(fl validator.FieldLevel) bool { username := fl.Field().String() // 检查用户名是否已存在(伪代码) return !isUserExist(username) }
  • func ErrorHandler() gin.HandlerFunc { return func(c *gin.Context) { c.Next() if len(c.Errors) > 0 { c.JSON(-1, gin.H{“error”: c.Errors[0].Error()}) } } }
  • Gin 的路由、中间件与参数校验体系具有以下特点: 功能 优势 路由分组 清晰组织业务模块 中间件机制 控制请求流程,适合处理日志、鉴权、限流等 参数校验 自动化、 declarative 风格校验 错误处理 统一处理逻辑,提升用户体验与开发效率 到此这篇关于Go语言Web开发框架之路由、中间件、参数校验实践记录的文章就介绍到这了,更多相关go 路由 中间件 参数校验内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 掌握GoLang Fiber路由和中间件技术进行高效Web开发 Go的gin参数校验中的validator库详解 Go高效率开发Web参数校验三种方式实例 golang validator库参数校验实用技巧干货 golang validator参数校验的实现
  • 目录
    • 一、路由管理进阶
      • 1. 路由分组(Group)
      • 2. 路由路径参数
    • 二、中间件机制
      • 1. 应用级中间件(全局)
      • 2. 路由组级中间件
      • 3. 中间件控制流程
    • 三、请求参数绑定与校验
      • 四、结构体绑定与字段校验
        • 示例:注册接口参数校验
        • 常用校验规则(基于 validator.v10):
      • 五、自定义校验器(可选高级用法)
        • 六、结合中间件做统一错误处理
          • 七、小结

            Gin 框架不仅以极简风格著称,其强大的路由管理、可插拔中间件机制以及参数绑定和校验系统,也让它在实际项目中备受欢迎。

            将 API 模块逻辑清晰划分,常见于 RESTful 风格项目。

            r := gin.Default()
            v1 := r.Group("/api/v1")
            {
                v1.GET("/users", getUsers)
                v1.POST("/users", createUser)
            }
            v2 := r.Group("/api/v2")
            {
                v2.GET("/users", getUsersV2)
            }

            r.GET("/users/:id", func(c *gin.Context) {
                id := c.Param("id")
                c.String(200, "User ID: %s", id)
            })

            支持通配符:

            r.GET("/files/*filepath", func(c *gin.Context) {
                fp := c.Param("filepath")
                c.String(200, "Path: %s", fp)
            })

            func Logger() gin.HandlerFunc {
                return func(c *gin.Context) {
                    t := time.Now()
                    c.Next()
                    latency := time.Since(t)
                    log.Printf("[%s] %s", c.Request.Method, latency)
                }
            }
            r := gin.New()
            r.Use(Logger())

            auth := r.Group("/admin")
            auth.Use(AuthMiddleware())
            {
                auth.GET("/dashboard", dashboardHandler)
            }

            • • c.Next():继续执行后续处理器
            • • c.Abort():终止请求链
            • • c.AbortWithStatusJSON(401, ...):终止并返回响应

            Gin 支持从多种来源绑定参数,包括:

            来源 方法
            URL 参数 c.Param("xxx")
            Query 参数 c.Query("xxx")
            Form 表单 c.PostForm("xxx")
            JSON c.ShouldBindJSON(&obj)

            type RegisterForm struct {
                Username string `json:"username" binding:"required,min=3"`
                Email    string `json:"email" binding:"required,email"`
                Age      int    `json:"age" binding:"gte=18,lte=60"`
            }
            func RegisterHandler(c *gin.Context) {
                var form RegisterForm
                if err := c.ShouldBindJSON(&form); err != nil {
                    c.JSON(400, gin.H{"error": err.Error()})
                    return
                }
                c.JSON(200, gin.H{"message": "Register success"})
            }

            规则 含义
            required 必填
            email 必须是合法邮箱
            min 最小长度(数字/字符串)
            max 最大长度
            gte/lte 大于等于 / 小于等于
            len 指定长度
            oneof 必须是其中之一

            var validate *validator.Validate
            func main() {
                validate = validator.New()
                validate.RegisterValidation("username_available", checkUsernameAvailable)
            }
            func checkUsernameAvailable(fl validator.FieldLevel) bool {
                username := fl.Field().String()
                // 检查用户名是否已存在(伪代码)
                return !isUserExist(username)
            }

            func ErrorHandler() gin.HandlerFunc {
                return func(c *gin.Context) {
                    c.Next()
                    if len(c.Errors) > 0 {
                        c.JSON(-1, gin.H{"error": c.Errors[0].Error()})
                    }
                }
            }

            Gin 的路由、中间件与参数校验体系具有以下特点:

            功能 优势
            路由分组 清晰组织业务模块
            中间件机制 控制请求流程,适合处理日志、鉴权、限流等
            参数校验 自动化、 declarative 风格校验
            错误处理 统一处理逻辑,提升用户体验与开发效率

            到此这篇关于Go语言Web开发框架之路由、中间件、参数校验实践记录的文章就介绍到这了,更多相关go 路由 中间件 参数校验内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

            您可能感兴趣的文章:

            • 掌握GoLang Fiber路由和中间件技术进行高效Web开发
            • Go的gin参数校验中的validator库详解
            • Go高效率开发Web参数校验三种方式实例
            • golang validator库参数校验实用技巧干货
            • golang validator参数校验的实现

            站内搜索