Echo路径参数必须用:name语法,不支持{name}或$name;须用c.Param("name")获取,不可混用查询参数或手动解析;多参数按路径位置匹配,命名含短横需转下划线,重复名仅取首个,可选参数为空字符串需显式判断。

路径参数必须用 :name 语法,不能写成 {name} 或 $name
这是最常踩的坑:Echo 不支持其他框架常见的花括号或美元符写法。路径中只要出现 :id、:slug 这类冒号开头的标识,就会被识别为路径参数。例如 /user/:id 能匹配 /user/123 和 /user/abc,但 /user/{id} 会被当作静态路径字面量,完全不触发参数提取。
c.Param("name") 是唯一安全取值方式,别用 c.QueryParam 或正则解析
路径参数和查询参数(?key=value)是两套独立机制。c.QueryParam("id") 永远拿不到 /user/:id 中的 id 值;手动用 strings.Split(r.URL.Path, "/") 解析不仅脆弱,还会绕过 Echo 的路由树匹配逻辑,导致中间件行为异常。正确做法只有一条:
- 定义路由时用
:id、:category等命名 - 在 handler 中统一调用
c.Param("id")获取字符串值 - 若需类型转换,自己做
strconv.Atoi或uuid.Parse,框架不自动转
多个路径参数共存时,顺序和命名必须严格对应路径结构
像 /posts/:year/:month/:slug 这样的路由,c.Param("year") 拿到的是第一段,c.Param("month") 是第二段——名字本身不决定顺序,而是冒号后字符串在路径中的位置。常见错误包括:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 把
/api/v1/:id/:action误写成/api/v1/:action/:id,结果id取到的是delete这类字符串 - 参数名含特殊字符如
:user-id(带短横),Echo 会截断为user,实际应改用:user_id - 重复使用同一参数名如
/a/:id/b/:id,只会返回第一个匹配段,第二个被忽略
可选路径参数不存在时 c.Param() 返回空字符串,不是 panic
像 /user/:id? 这种写法,当请求是 /user/ 时,c.Param("id") 返回 "",而非报错或 nil。这意味着你必须显式判断空值:
id := c.Param("id")
if id == "" {
id = "default"
}
别假设它会自动 fallback,也别对空字符串做 strconv.Atoi——这会导致 0 和真实 id="0" 无法区分,业务上容易出错。


















