Gin-请求参数解析

1. 路径参数解析

路径参数是 URL 中的一部分,通常用于标识资源。例如:/user/:id

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()

// 定义路径参数
r.GET("/user/:id", func(c *gin.Context) {
id := c.Param("id") // 获取路径参数
c.JSON(200, gin.H{"user_id": id})
})

r.Run(":8080")
}

注意事项

  • 路径参数通过 c.Param(key) 获取。
  • 参数名称需要与路由定义中的占位符一致。

2. 查询参数解析

查询参数是附加在 URL 后面的参数部分,例如:/search?query=golang&page=1

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import (
"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()

// 查询参数解析
r.GET("/search", func(c *gin.Context) {
query := c.Query("query") // 获取查询参数
page := c.DefaultQuery("page", "1") // 带默认值的查询参数
c.JSON(200, gin.H{
"query": query,
"page": page,
})
})

r.Run(":8080")
}

注意事项

  • 查询参数通过 c.Query(key) 获取。
  • 使用 c.DefaultQuery(key, defaultValue) 可以设置默认值。

3. 表单参数解析

表单参数通常通过 POST 请求的表单数据发送到服务器。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import (
"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()

// 表单参数解析
r.POST("/login", func(c *gin.Context) {
username := c.PostForm("username") // 获取表单参数
password := c.DefaultPostForm("password", "123456") // 带默认值的表单参数
c.JSON(200, gin.H{
"username": username,
"password": password,
})
})

r.Run(":8080")
}

注意事项

  • 表单参数通过 c.PostForm(key) 获取。
  • 使用 c.DefaultPostForm(key, defaultValue) 设置默认值。

4. 混合参数解析

有时候需要同时处理路径参数、查询参数和表单参数。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()

r.POST("/user/:id", func(c *gin.Context) {
// 路径参数
id := c.Param("id")
// 查询参数
action := c.Query("action")
// 表单参数
comment := c.PostForm("comment")

c.JSON(200, gin.H{
"user_id": id,
"action": action,
"comment": comment,
})
})

r.Run(":8080")
}

注意事项

  • 可以混合使用 c.Paramc.Queryc.PostForm
  • 确保参数名不冲突,便于管理。

5. 总结

Gin 提供了多种方式来解析请求参数:

  • 路径参数:用于资源标识,通常通过 c.Param 获取。
  • 查询参数:适合用于筛选和分页,使用 c.Queryc.DefaultQuery
  • 表单参数:用于提交数据,通过 c.PostFormc.DefaultPostForm 获取。