全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 7 分钟 ✍️ juanwangdev

请求参数绑定

Gin 提供多种参数绑定方式,支持从不同来源获取请求数据。

Query 参数

URL 查询字符串参数:

Go
// GET /search?keyword=gin&page=1
r.GET("/search", func(c *gin.Context) {
    keyword := c.Query("keyword")       // 获取参数,不存在返回空字符串
    page := c.DefaultQuery("page", "1") // 带默认值
    c.JSON(200, gin.H{
        "keyword": keyword,
        "page":    page,
    })
})

Form 表单参数

POST 表单数据:

Go
// POST /login
// Content-Type: application/x-www-form-urlencoded
r.POST("/login", func(c *gin.Context) {
    username := c.PostForm("username")
    password := c.DefaultPostForm("password", "")
    c.JSON(200, gin.H{
        "username": username,
        "password": password,
    })
})

JSON 参数绑定

自动绑定 JSON 请求体:

Go
type User struct {
    Name string `json:"name" binding:"required"`
    Age  int    `json:"age"`
}

r.POST("/user", func(c *gin.Context) {
    var user User
    if err := c.ShouldBindJSON(&user); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
    c.JSON(200, user)
})

URI 路径参数

URL 路径中的参数:

Go
// GET /users/123
r.GET("/users/:id", func(c *gin.Context) {
    id := c.Param("id")
    c.JSON(200, gin.H{"user_id": id})
})

// 通配符参数
// GET /files/path/to/file.txt
r.GET("/files/*filepath", func(c *gin.Context) {
    filepath := c.Param("filepath") // /path/to/file.txt
    c.String(200, "File: %s", filepath)
})

Header 参数

获取请求头:

Go
r.GET("/info", func(c *gin.Context) {
    token := c.GetHeader("Authorization")
    userAgent := c.GetHeader("User-Agent")
    c.JSON(200, gin.H{
        "token":      token,
        "user_agent": userAgent,
    })
})

自动绑定方法

方法数据来源
ShouldBindJSONJSON Body
ShouldBindQueryURL Query
ShouldBindUriURL 路径参数
ShouldBindHeader请求头
ShouldBind自动选择(优先 JSON)
Go
type SearchReq struct {
    Keyword string `form:"keyword" binding:"required"`
    Page    int    `form:"page" form:"page" binding:"min=1"`
}

// 自动绑定 Query 参数
r.GET("/search", func(c *gin.Context) {
    var req SearchReq
    if err := c.ShouldBindQuery(&req); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
    c.JSON(200, req)
})

使用 ShouldBind 系列方法时,传入结构体指针。

要点总结

  • c.Query() 获取 URL 查询参数
  • c.PostForm() 获取表单数据
  • c.Param() 获取 URL 路径参数
  • ShouldBind 系列方法自动绑定到结构体
  • 结构体标签指定字段映射

📝 发现内容有误?点击此处直接编辑

← 上一篇 结构体标签
下一篇 → 错误处理
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库