Echo路由是代码即配置,支持静态、参数化(如/users/:id)、通配符(如/files/*)三类路径,匹配优先级为静态>参数>通配符;查询参数自动解析,分组通过e.Group()实现前缀与中间件统一管理。

直接用 e.GET、e.POST 这类方法注册就行,不需要额外配置文件或复杂初始化——Echo 的路由是代码即配置。
基础 HTTP 方法路由怎么写
Echo 把每个 HTTP 方法都封装成一个方法,调用时传入路径和处理函数即可。路径支持静态、参数化、通配符三种形式,匹配优先级固定:静态 > 参数 > 通配符。
-
e.GET("/users", handler)匹配/users(纯静态) -
e.GET("/users/:id", handler)匹配/users/123或/users/abc,用c.Param("id")取值 -
e.GET("/files/*", handler)匹配/files/a/b/c.txt,用c.Param("*")取完整后缀 - 别把
/users/new和/users/:id写反顺序——即使先定义:id,/users/new仍会正确命中,因为静态优先
带查询参数的路由不用额外声明
Echo 不要求你在路径里写 ?page=1 这种东西。查询参数(GET /users?page=1&limit=20)自动可用,直接用 c.QueryParam("page") 或批量用 c.QueryParams() 拿。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
c.QueryParam("page")返回字符串,空值返回空字符串,不报错 - 如果要转成 int,得自己
strconv.Atoi,框架不自动类型转换 - 结构体绑定时,字段 tag 里加
query:"page"才能进 Bind 流程,否则c.Bind()不会读查询参数
路由分组和前缀怎么组织
用 e.Group("/api") 创建子路由组,所有子路由自动带上前缀,还能统一挂中间件。
-
api := e.Group("/api")后,api.GET("/users", ...)实际响应的是/api/users - 支持嵌套:
v1 := api.Group("/v1")→v1.GET("/users")对应/api/v1/users - 中间件只对组内生效:
auth := api.Group("/admin")→auth.Use(middleware.BasicAuth(...)) - 组本身不处理请求,只是逻辑容器;没注册的路径(比如
/api根路径)默认 404
为什么 e.Any 和 e.Match 很少用
e.Any("/health", handler) 是为所有方法注册同一 handler,适合健康检查;e.Match([]string{"PUT", "PATCH"}, "/user", handler) 是多方法共用一个路径——但绝大多数场景下,明确分开写 PUT 和 PATCH 更清晰、更易调试。
-
e.Any容易掩盖语义错误:比如本该只允许 GET 的接口被 POST 也能过 -
e.Match在 Swagger 文档生成或前端 SDK 自动生成时可能识别异常 - 真正需要“多法一路径”的情况极少,多数是设计疏漏,建议先厘清 REST 语义再决定是否合并
最易被忽略的是路由匹配顺序背后的隐式规则:Echo 内部用 Radix Tree 实现,路径定义顺序不影响匹配结果,但开发者常误以为“先定义就先匹配”,导致调试时绕弯路。实际只需关注路径字面量是否符合静态 > 参数 > 通配符的层级关系。


















