Chi 路由中需用 mx.Mount("/debug/pprof", http.HandlerFunc(pprof.Index)) 挂载 pprof,不可用 Handle/Get 或 StripPrefix;路径须为 /debug/pprof(无尾斜杠),且必须在业务路由前注册,避免被通配路由拦截。

Chi 路由里直接 import _ "net/http/pprof" 没用
这不是 GoLand 的问题,而是 net/http/pprof 的注册机制决定的:它只往 http.DefaultServeMux 注册路由,而 Chi 完全不使用这个默认 mux。你在 GoLand 里点进包、加断点、看 import 列表都没用——只要没手动桥接,/debug/pprof/ 就一定 404。
必须用 chi.Router.Mount() 挂载 pprof.Index
Chi 不支持直接 Handle() pprof 处理器,因为子路径(如 /debug/pprof/heap)需要路径前缀剥离和路由分发,Mount() 是唯一正确方式:
-
mx.Mount("/debug/pprof", http.HandlerFunc(pprof.Index))—— 必须这么写,不能省略Mount,也不能换成Handle或Get - 路径必须是
/debug/pprof(结尾无斜杠),否则内部重定向会失败 - 别用
chi.With()包一层再 Mount,它的中间件不会透传给 pprof 子路径
GoLand 调试时注意 pprof 路由优先级和启动顺序
pprof 路由要早于业务路由注册,否则可能被更宽泛的通配路由(比如 r.Get("/*p", handler))提前捕获:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 在
main()初始化r := chi.NewRouter()后立刻调用mx.Mount() - 确保
r.Use(...)全局中间件在 Mount 之后、业务路由之前调用,避免中间件干扰 pprof 静态资源响应 - GoLand 运行配置里确认服务监听的是你期望的端口,且没被其他进程占用;访问
http://localhost:8080/debug/pprof/前先 curl 测试,排除浏览器缓存干扰
pprof 页面能打开但 profile/heap 点不开?检查 StripPrefix 是否被误加
Chi 的 Mount() 已内置路径前缀处理,**不需要也不应该** 手动套 http.StripPrefix。常见错误写法:mx.Mount("/debug/pprof", http.StripPrefix("/debug/pprof", http.HandlerFunc(pprof.Index))) —— 这会导致所有子路径返回 404,因为 pprof.Index 内部依赖原始 URL 路径解析请求类型。
真正容易被忽略的是:pprof 子路径(如 /debug/pprof/heap?debug=1)依赖 query 参数,若你全局启用了强制 HTTPS 重定向或反向代理改写了 Host 头,某些采样接口(如 /debug/pprof/profile)可能因重定向循环或证书校验失败而卡住。这类问题在 GoLand 本地调试时极少出现,但一旦部署到网关后就暴露。










