在 Go 的 Gin Web 框架中,获取 HTTP 请求参数有多种方式

在 Go 的 Gin Web 框架中,获取 HTTP 请求参数有多种方式


1. 路径参数(Path Parameters)

使用 :paramName 在路由中定义,通过 c.Param("paramName") 获取。

go 复制代码
r := gin.Default()
r.GET("/user/:id", func(c *gin.Context) {
    id := c.Param("id")
    c.JSON(200, gin.H{"id": id})
})

请求示例:GET /user/123 → 返回 {"id": "123"}


2. 查询参数(Query Parameters)

URL 中的 ?key=value 形式,使用 c.Query()c.DefaultQuery()

go 复制代码
r.GET("/search", func(c *gin.Context) {
    name := c.Query("name")           // 如果不存在返回空字符串
    age := c.DefaultQuery("age", "0") // 可设置默认值
    c.JSON(200, gin.H{"name": name, "age": age})
})

请求示例:GET /search?name=alice&age=25


3. 表单参数(Form Data)

适用于 POST 请求中的 application/x-www-form-urlencodedmultipart/form-data

go 复制代码
r.POST("/form", func(c *gin.Context) {
    name := c.PostForm("name")
    email := c.DefaultPostForm("email", "unknown@example.com")
    c.JSON(200, gin.H{"name": name, "email": email})
})

4. JSON 请求体

使用 c.ShouldBindJSON() 绑定到结构体(推荐),或用 c.GetRawData() 获取原始数据。

go 复制代码
type User struct {
    Name  string `json:"name" binding:"required"`
    Email string `json:"email" binding:"required,email"`
}

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)
})

请求示例:

json 复制代码
POST /user
Content-Type: application/json

{
  "name": "Bob",
  "email": "bob@example.com"
}

注意:ShouldBindJSON 会自动验证字段(如 binding:"required")。

相关推荐
To_OC1 小时前
面试被问了三回三栏布局,这次我终于把 BFC 那层窗户纸捅破了
前端·css·面试
To_OC2 小时前
啃完 TS 工具类型我发现:Pick 和 Omit 原来就是一层窗户纸
前端·面试·typescript
聪明蛋子哟2 小时前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
python·golang·rust
风月说与山鬼3 小时前
三、大括号语法
前端·react.js
kyriewen3 小时前
我把最常踩的8个CORS跨域报错整理了一遍——第8个去年还不存在
前端·javascript
Csvn4 小时前
🕰️ 闭包 + setTimeout 的 5 个经典陷阱:为什么定时器看到的永远不是最新的值?
前端
lilian2334 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
CarIise5 小时前
CSS选择器与样式关联
前端·css·tensorflow
里欧跑得慢6 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js