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

相关推荐
Highcharts.js1 分钟前
React 如何实现大数据量图表(性能优化指南)
前端·javascript·react.js·信息可视化·集成·highcharts
奔跑的呱呱牛2 分钟前
如何设计一个可扩展的地图前端架构?从0到1的工程实践(OpenLayers)
前端·架构·openlayers
Dxy123931021612 分钟前
JS如何把数据添加到列表中
前端·javascript·vue.js
蜡台17 分钟前
Uniapp 实现 二手车价格评估 功能
前端·javascript·uni-app·估值·汽车抵押·二手车评估
旭久19 分钟前
web前端开发好物推荐-(code-inspector-plugin/react-dev-inspector)页面快捷定位代码位置
前端·react.js·前端框架
floret. 小花22 分钟前
Vue3 知识点总结 · 2026-03-20
前端·面试·electron·学习笔记·vue3
木斯佳24 分钟前
前端八股文面经大全:Bilibili 前端实习面(2026-03-20)·深度解析
前端·sse·ssr·rag
比特森林探险记27 分钟前
Element Plus 实战指南
前端·javascript
Fairy要carry33 分钟前
面试-Dispatch Tools
前端·chrome