Go-Chi Chi:Go 语言里最轻量的 HTTP 路由,22K Star 的项目只靠 1000 行代码

Go-Chi Chi:Go 语言里最轻量的 HTTP 路由,22K Star 的项目只靠 1000 行代码

chi 在 GitHub 上拿到了 22.2K Star。这个 Go 语言的 HTTP 路由库,核心代码不到 1000 行。

它的设计思路很直接:只依赖 Go 标准库,完全兼容 net/http,用极少的代码量提供构建 REST API 所需的全部能力。

1、chi 解决了什么问题

Go 标准库的 net/http 能处理 HTTP 请求,但路由功能偏基础。没有 URL 参数解析、没有路由分组、没有中间件链。第三方路由库往往引入额外依赖,接口也不完全兼容标准库。

chi 的定位是在标准库之上做一层薄封装。它不定义自己的 Handler 类型,不引入上下文抽象,所有 handler 都是标准的 http.Handler。这意味着你能直接用生态里已有的中间件,不用做任何适配。

正文顶部截图

2、路由设计:组合优于继承

chi 的路由提供了 Group、Route、Mount、With 四种组织方式。

Group 创建内联路由器,用于给一组路由统一添加前缀;Route 在指定 pattern 下挂载子路由;Mount 可以接入另一个完整的 http.Handler;With 为单个端点附加行内中间件,不产生新的路由组。

这种分层结构很适合 REST 接口的场景。一个典型的 /articles 资源,可以拆成 GET /articles(列表)、POST /articles(创建)、/articles/{articleID} 子路由(单个资源的 CRUD),每一层都能独立控制中间件。

README区域截图

3、中间件体系

chi 自带一个 middleware 包,包含 20 多种中间件:Logger、Recoverer、Timeout、RequestID、RealIP、Compress、Throttle、BasicAuth 等。

中间件本身就是标准 net/http 中间件,签名是 func(http.Handler) http.Handler。社区里任何兼容 net/http 的中间件都可以直接接入,不需要包装层。

除了内置的,go-chi 组织下还有一组扩展包:cors、JWT 认证(jwtauth)、域名路由(hostrouter)、限流(httprate)、请求追踪(httptracer)、请求合并(stampede)等,按需选用。

4、URL 参数和上下文传递

chi 的路由模式支持命名参数和正则约束。/users/{userID} 匹配任意路径段,/articles/{articleSlug:[a-z-]+} 限定参数格式。URL 参数通过 chi.URLParam(r, "userID") 在 handler 中读取,底层存在请求上下文里。

上下文传递是 chi 的工作机制。中间件通过 context.WithValue 注入数据,后续 handler 从 r.Context() 中读取。这个模式贯穿整个请求生命周期,从认证注入用户信息,到超时控制,再到参数解析,全部走同一套机制。

5、适合哪些场景

  • 需要标准库兼容的新项目,不希望被框架锁定
  • 已有基于 net/http 的代码,想渐进式引入更好的路由能力
  • REST API 服务,路由层次多,需要中间件精细控制
  • 追求轻量和可控的团队,想要读懂路由代码本身

chi 在生产环境中经过了验证,Cloudflare、Heroku 等公司都在使用。对于大多数 Go HTTP 服务的需求来说,1000 行代码的 chi 已经够用。

posted @ 2026-06-05 12:05  techarch  阅读(15)  评论(0)    收藏  举报