gin路由中冒号参数仅匹配单段路径且须用斜杠分隔,星号通配符必须唯一且位于末尾;二者混用时顺序不可颠倒,否则导致404或panic。

冒号参数只匹配单段路径,星号通配符必须在末尾且唯一,二者混用时顺序不能颠倒——这是Gin路由能正常工作的底线,踩错任一规则都会导致请求静默 404 或意外命中。
冒号参数 :id 只吃掉一个不含斜杠的路径段
它不是正则模糊匹配,而是严格按“/”切分后的单个 token。比如 /user/:id 能匹配 /user/123,但不匹配 /user/123/profile,因为后者第二段是 profile,而路由定义里根本没有后续路径。
- 参数名后可加正则约束,如
/user/:id([0-9]+),此时/user/abc直接 404,不会进 handler -
c.Param("id")返回的是字符串,需自行转类型,Gin 不做隐式转换 - 多个冒号参数之间必须用斜杠隔开,
/a/:x/b/:y合法,/a/:x:y是语法错误
星号通配符 *filepath 贪婪捕获到路径末尾
它从声明位置开始,吞掉包括所有 / 在内的剩余全部路径,且返回值**自带前导斜杠**。例如 /file/*filepath 匹配 /file/a/b/c.txt 时,c.Param("filepath") 得到的是 /a/b/c.txt,不是 a/b/c.txt。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 必须放在路径最末,
/*path/end会编译失败或注册无效 - 整个路由中只能有一个
*段,/a/*x/b/*y不被允许 - 若要拼接文件系统路径,务必先用
strings.TrimPrefix(c.Param("filepath"), "/")剥离前导斜杠,否则可能触发目录遍历风险
冒号和星号混合使用:顺序和位置都不可妥协
典型场景是反向代理或服务透传,如 /proxy/:service/*path。这里 :service 必须在前,*path 必须在最后,中间不能插任何静态字符或其它参数。
- 写成
/:service/*path是合法的,但/*path/:service会导致router.GET调用 panic 或静默忽略该路由 -
c.Param("service")和c.Param("path")是独立提取的,互不影响;path值仍带前导斜杠 - 这种组合无法绕过 Gin 的 Radix Tree 结构限制——树节点类型(
param和catchAll)决定了它们只能出现在特定位置
真正容易被忽略的是:Gin 的路由匹配发生在 Radix Tree 查找阶段,不是字符串正则扫描。这意味着路径结构一旦注册就固化在树形结构里,改写路由定义不如重看节点类型和插入逻辑来得直接。










