echo路由匹配优先级为:1.静态路径(完全相等,不看注册顺序);2.参数路径(段数严格一致,冲突时后注册覆盖);3.通配符路径(需置于末尾,否则截断其他路由);未匹配则返回404。

静态路由优先匹配
当请求路径为 /users/new 时,即使同时注册了 /users/:id 和 /users/*,Echo 也会先命中 /users/new 这条完全一致的静态路径。
这是因为 Echo 内部使用 radix tree 实现路由,静态路径节点在树中处于最高优先级层级,匹配过程不依赖注册顺序,而是由路径字面量精确度决定。
若把 /users/new 放在最后注册,它依然会优先于其他模糊路径被选中——【静态路径匹配不看注册先后,只看路径是否完全相等】。
参数路径次之
静态路径未命中后,Echo 开始扫描带冒号的参数路径,例如 /users/:id 或 /posts/:slug。
参数路径支持任意字符串匹配,但要求路径段数量严格一致:/users/123 匹配 /users/:id,而 /users/123/profile 不匹配——它需要的是两段,不是三段。
多个参数路径之间按注册顺序无关,只要路径结构唯一,就不会冲突;但若定义了 /users/:id 和 /users/:name,两者实际无法共存,因为它们在 radix tree 中指向同一节点,后注册的会覆盖前注册的。
通配符路径兜底
只有当前两层都未匹配成功时,* 才会被启用。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
方法一:用 e.GET("/files/*", handler) 匹配所有以 /files/ 开头的路径,包括 /files/1、/files/a/b/c。
方法二:用 e.Any("/*", fallbackHandler) 捕获全部未被前面规则处理的请求,常用于 404 统一响应。
注意:/* 是贪婪匹配,一旦注册就必须放在最后,否则它会提前截断后续更具体的路由——【把它写在路由表最末尾,否则其他路由可能永远收不到请求】。
匹配失败时的行为
第一步:检查请求方法是否与注册方法一致。GET 请求不会匹配 POST 注册的路由,哪怕路径完全相同。
第二步:提取请求路径并标准化,自动去除尾部斜杠(/users/ → /users),再进行比对。
第三步:若所有层级均无匹配,Echo 默认返回 404 状态码,不执行任何 handler。
这一步不可跳过,也没有隐式 fallback;没有显式注册的路径,就是不存在。










