Gin中冒号参数匹配单段路径,星号通配符贪婪匹配末尾所有路径(含斜杠),二者可混合使用但星号必须居末且唯一。

要在Gin中实现URL路径中可变部分的精准捕获,比如/user/123或/product/detail/abc,必须掌握冒号参数与星号通配符的真实匹配边界和行为差异,否则路由会静默失效或意外命中。
冒号参数:单层路径段精确匹配
冒号后紧跟参数名(如:id),仅匹配一个不含/的路径段。
第一步:在路由定义中写router.GET("/user/:id", handler)。
第二步:访问http://localhost:8080/user/42时,c.Param("id")返回"42";但访问/user/42/profile将完全不匹配该路由——【冒号参数无法跨越斜杠】。
第三步:若需约束格式,可在参数名后加正则,例如/user/:id([0-9]+),此时/user/abc直接返回404,不进入handler。
星号通配符:贪婪匹配剩余全部路径
星号*用于捕获从某点开始直到路径末尾的所有内容,包括中间的多个/。
方法一:使用router.GET("/file/*filepath", handler)。
方法二:访问/file/a/b/c.txt时,c.Param("filepath")返回"/a/b/c.txt"——注意开头自带斜杠,这是Gin的固定行为,不手动添加。
方法三:搭配strings.TrimPrefix(c.Param("filepath"), "/")可安全剥离前导斜杠,避免路径拼接错误。
混合使用:冒号+星号的典型场景
当既要提取固定层级标识,又要透传深层路径时,二者必须严格按顺序组合。
① 定义路由:router.GET("/proxy/:service/*path", proxyHandler)。
② 请求/proxy/api/v1/users/123?format=json时,c.Param("service")得"api",c.Param("path")得"/v1/users/123"。
③ 【顺序不可颠倒】:写成/:service/*path合法,但/*path/:service会导致编译报错或路由注册失败。
④ 注意:星号必须位于路径末尾,且整个路由中最多只能有一个星号段。



















