在 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-urlencoded 或 multipart/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")。

相关推荐
沙蒿同学2 分钟前
Wails v3 实战:一个桌面提醒客户端,从 v2 升到 v3 的全过程
前端·后端·github
inquisiter20 分钟前
KernelGpt的部分尝试
java·前端·apache
the局外人42 分钟前
用 TRAE 把 Markdown文档 搬到微信公众号
前端
Autumn_ing43 分钟前
AI原型设计工具怎么选?可编辑原型与可运行前端适合什么场景
前端·小程序·产品经理·代码·codex·墨刀ai客户端·ai原型
夕阳_醉了1 小时前
前端通用组件开发全指南|从 0 到 1 打造稳定可复用的业务组件
前端
Amos_Web1 小时前
Rspack 源码解析(三十):SourceMapDevToolPlugin 如何生成并关联 source map
前端
console.log('npc')1 小时前
从0到1实现任务评价统计功能:React + TypeScript 实战指南(小白注释版)
前端·react.js·typescript
IT_陈寒2 小时前
为什么你应该学习React?
前端·人工智能·后端
ZoeLandia2 小时前
React04:事件处理与受控表单
开发语言·前端·react.js·typescript
亿元程序员2 小时前
用AI做了一款微信小游戏,却发现上传不了
前端