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