Gin - 泛请求前缀

Gin 中的请求前缀匹配

在 Gin 中,路由不仅可以精确匹配,还支持通配符匹配(Wildcard),这让我们能够为某一类请求设置统一前缀,便于做反向代理、网关转发、Mock 接口、动态匹配等场景。

1. 请求前缀(Wildcard)匹配是什么?

通过在路由中使用 *param 的写法,你可以让 Gin 匹配所有以某个前缀开头的请求。例如:

1
/user/*action

含义:

  • 匹配所有 /user/... 的请求
  • *action 会捕获 /user/ 后面的所有内容(包含 /
  • 例如:
    • /user/a → action = /a
    • /user/profile/info → action = /profile/info
    • /user/ → action = /(注意尾斜杠也会被捕获)

这是 Gin 官方提供的 全路径捕获(catch-all) 方案,经常用于统一代理或 mock。

2. 如何在路由处理函数中获取匹配到的路径?

Gin 会把通配符部分当作一个参数,通过 c.Param 即可获取。

1
c.Param("action")

注意:返回的字符串带前导斜杠,也就是 "/xxx",这是 Gin 的设计。

3. 代码示例

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

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

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

r.GET("/user/*action", func(c *gin.Context) {
action := c.Param("action")
c.JSON(200, gin.H{
"message": "泛请求前缀匹配,所有 /user 路径下的请求都会匹配到这个路由",
"action": action,
})
})
r.Run(":8080")
}

4. 使用效果示例

例如访问:

1
http://localhost:8080/user/profile/setting

返回:

1
2
3
4
{
"message": "泛请求前缀匹配,所有 /user 路径下的请求都会匹配到这个路由",
"action": "/profile/setting"
}

如图所示:

Gin - 泛请求前缀


Gin - 泛请求前缀
https://blog.pangcy.cn/2025/11/19/后端编程相关/go/gin/Gin - 泛请求前缀/
作者
子洋
发布于
2025年11月19日
许可协议