You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go Chi路由将子路由路径误识别为URL参数问题求助

问题原因分析

你遇到的*参数被映射为product的情况,是因为在chi路由的子路由组中使用了以斜杠开头的路径导致的。

具体来说:

  • 你通过baseRouter.Route("/{param1}/{param2}/dummy/new", ...)创建了一个路由组,该组的前缀是/{param1}/{param2}/dummy/new。
  • 在子路由中定义路径时,你使用了/product、/product/report这类以/开头的写法。chi在处理这种路径时,会将斜杠后的部分(如product)当作通配符*的捕获值,而非固定路径的一部分,因此会在RouteContext的URLParams中出现*这个参数。
解决方案

修改productHandler.MountRoutes函数中的路由路径,去掉路径开头的斜杠,让路径相对于父路由组的前缀进行拼接:

func (h Handler) MountRoutes(r chi.Router) {
    r.MethodFunc(http.MethodGet, "product/report/{report_id}", h.ExportStatus)
    r.MethodFunc(http.MethodPost, "product/report", h.ExportProducts)
    r.MethodFunc(http.MethodPost, "product", h.GetProducts)
}

修改后,当请求/val1/val2/dummy/new/product时,RouteContext的URLParams只会包含你定义的param1和param2两个参数,不再出现多余的*参数。

验证说明

调整路径写法后,chi会将子路由路径与父组前缀正确拼接为完整路由(如/{param1}/{param2}/dummy/new/product),此时路由匹配时只会捕获你显式定义的路径参数,不会将固定路径部分当作通配符参数捕获。

内容的提问来源于stack exchange,提问作者vignesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:51:30