一、什么是 Path 路径参数
路径参数(也叫 URL 路径参数、占位符参数),参数直接放在 URL 路径中,使用 / 进行分割 ,不是放在?后面。
示例地址:
http://127.0.0.1:9090/blog/2026/08
/blog:固定路由前缀2026:year 路径参数08:month 路径参数
适用场景:博客文章年月、用户 id、资源详情页等 REST 风格接口。
二、基础语法
1. 路由定义规则
使用 :参数名 作为占位符
Go
r.GET("/blog/:year/:month", func(c *gin.Context) {
})
:year、:month 就是路径占位符
2. 获取路径参数
Go
变量 := c.Param("参数名")
⚠️注意:
c.Param()获取到的值永远是 string 字符串类型,如果需要数字,要手动转换为 int。
三、完整代码示例
Go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 定义带路径参数的路由
r.GET("/blog/:year/:month", func(c *gin.Context) {
// 获取路径参数
year := c.Param("year")
month := c.Param("month")
// 返回JSON响应
c.JSON(http.StatusOK, gin.H{
"year": year,
"month": month,
})
})
r.Run(":9090")
}
浏览器测试访问地址
http://127.0.0.1:9090/blog/2026/08
返回结果:
Go
{"month":"08","year":"2026"}
四、多组路径参数(防止路由冲突)
多条带占位符的路由,固定前缀不一样就不会冲突
Go
// 用户路由
r.GET("/user/:name/:age", func(c *gin.Context) {
name := c.Param("name")
age := c.Param("age")
c.JSON(http.StatusOK, gin.H{
"name": name,
"age": age,
})
})
// 博客路由
r.GET("/blog/:year/:month", func(c *gin.Context) {
year := c.Param("year")
month := c.Param("month")
c.JSON(http.StatusOK, gin.H{
"year": year,
"month": month,
})
})
路由冲突坑点:
/user/:name和/:name就会发生冲突,Gin 优先匹配先注册的路由。
五、路径参数核心特点 & 易错点总结
- 参数放在 URL 路径,由
/分割,不带? - 获取函数:
c.Param("key") - 返回值固定为字符串 string
- 路径参数必填,不能省略,少一段路径就直接 404
- 路由前缀不一样,多条带占位符路由不会冲突
六、Gin 三种传参方式对比(复习联动)
表格
| 参数类型 | 获取方法 | 示例 URL |
|---|---|---|
| Form 表单 POST 参数 | c.PostForm() | 表单提交 /login |
| Path 路径参数 | c.Param() | /blog/2026/08 |
| Query 查询参数 | c.Query() | /info?id=1&name=zs |