在 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")。

相关推荐
晚风予星4 分钟前
Ant Design Token Lens 迎来了全面升级!支持在 .tsx 或 .ts 文件中直接使用 Design Token
前端·react.js·visual studio code
sunny_15 分钟前
⚡️ vite-plugin-oxc:从 Babel 到 Oxc,我为 Vite 写了一个高性能编译插件
前端·webpack·架构
GIS之路18 分钟前
ArcPy 开发环境搭建
前端
林小帅2 小时前
【笔记】OpenClaw 架构浅析
前端·agent
林小帅2 小时前
【笔记】OpenClaw 生态系统的多语言实现对比分析
前端·agent
程序猿的程2 小时前
开源一个 React 股票 K 线图组件,传个股票代码就能画图
前端·javascript
不爱说话郭德纲3 小时前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
唐叔在学习3 小时前
[前端特效] 左滑显示按钮的实现介绍
前端·javascript
用户5282290301804 小时前
【学习笔记】ECMAScript 词法环境全解析
前端
青青家的小灰灰4 小时前
React 架构进阶:自定义 Hooks 的高级设计模式与最佳实践
前端·react.js·前端框架