动态路由需显式调用 RebuildTree() 才生效,否则新增或删除的路由不会影响匹配;该操作非线程安全、性能开销大,仅限开发环境单次使用。

动态路由在 Fiber 中不是靠路径模板自动“启用”的,而是靠 RebuildTree() 主动触发生效;不调用它,app.Get("/new") 只是记入栈、不会响应请求。
动态注册后必须调用 RebuildTree()
Fiber 的路由树在启动时构建一次,后续新增的路由(如在 handler 里调用 app.Get())只是追加到内部路由栈,并不自动更新匹配逻辑。必须显式调用 app.RebuildTree() 才能重建前缀树,让新路由可被访问。
- 错误写法:
app.Get("/debug/hotload", func(c fiber.Ctx) error { app.Get("/api/v2/test", handler); return c.SendStatus(200) })→ /api/v2/test 永远 404 - 正确写法:在新增后立刻调用
app.RebuildTree(),且不能并发调用 -
RebuildTree()返回*App,支持链式调用,比如app.RebuildTree().Get("/health", h)(但不推荐在重建后立即再注册,易混乱)
RemoveRoute() 需配合 RebuildTree() 才真正失效
RemoveRoute() 只是从路由栈中标记某条路由为“待移除”,并不立即影响匹配行为;必须随后调用 RebuildTree() 才会从前缀树中剔除该节点。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 常见误判:调用
app.RemoveRoute("GET", "/old")后立刻发请求,仍可能命中——因为树没重建 - 删除 + 新增同路径时,建议先
RemoveRoute(),再app.Get(),最后RebuildTree(),避免旧 handler 残留 - 注意:无法按 handler 函数引用删除,只能按 method + path 精确匹配
开发环境专用,禁止在生产或并发场景使用
官方明确标注运行时路由变更“very performance-intensive”,且 RebuildTree() 非线程安全——这意味着:
- 不能在多个 goroutine 里同时调用
RebuildTree(),否则 panic 或路由错乱 - 不要在中间件、日志钩子、recover 处理器等可能并发触发的位置调用
- 生产环境应通过配置热重载 + 进程重启实现变更,而非运行时修改路由树
- 开发调试时,可用
if os.Getenv("ENV") == "dev" { app.RebuildTree() }加一层保护
最易忽略的一点:每次 RebuildTree() 都会重新扫描整个路由栈并重建前缀树,若栈里有数百条路由(尤其含大量正则或通配),耗时会明显上升;建议只在真正需要热插拔的少数端点上使用,别把它当常规路由注册方式。










