返回列表 发布新帖
查看: 61|回复: 0

Golang Web 框架 Chi

发表于 2025-8-6 09:44:18 | 查看全部 |阅读模式

这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在构建轻量级 RESTful API 时,Go 的 chi 框架是一个极具优势的选择。chi 是一个专为 Go 设计的轻量级、高性能路由器,它不仅小巧,核心代码不足 1000 行,而且封装清晰,支持中间件、路由嵌套、路径参数等常用功能,十分适合 REST API 场景。

不仅如此,目前非常流行的 Golang HTTP Server —— Caddy,也在底层采用了 chi 作为路由器,可见其稳定性与灵活性之高。

官方文档地址:https://go-chi.io/#/pages/getting-started

安装 chi
确保你的项目已经通过 Go Modules 初始化:
  1. go mod init your-project-name
复制代码
然后安装 chi v5 版本:
  1. go get -u github.com/go-chi/chi/v5
复制代码
快速上手
使用 chi 构建一个简单 Web 服务非常快速,仅需三步:
  1. package main

  2. import (
  3.     "net/http"
  4.     "github.com/go-chi/chi/v5"
  5. )

  6. func main() {
  7.     // 1. 初始化路由器
  8.     r := chi.NewRouter()

  9.     // 2. 注册路由
  10.     r.Get("/", func(w http.ResponseWriter, r *http.Request) {
  11.         w.Write([]byte("Hello World!"))
  12.     })

  13.     // 3. 启动服务
  14.     http.ListenAndServe(":3000", r)
  15. }
复制代码
运行之后,通过浏览器或 curl 访问 http://localhost:3000 即可看到输出 Hello World!。
中间件支持
chi 框架内置了丰富的中间件(共 26 种),如:
  • middleware.Logger 日志记录
  • middleware.Compress 响应压缩
  • middleware.BasicAuth 基础认证
  • middleware.NoCache 禁止缓存


使用方式非常简单,通过 r.Use() 引入:
  1. import "github.com/go-chi/chi/v5/middleware"

  2. r := chi.NewRouter()
  3. r.Use(middleware.Logger) // 启用日志中间件
复制代码
自定义中间件
chi 也支持自定义中间件:
  1. func chiMiddleware(next http.Handler) http.Handler {
  2.     return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  3.         w.Write([]byte("Middleware Print\n")) // 中间件前置操作
  4.         next.ServeHTTP(w, r)                  // 执行后续处理
  5.     })
  6. }

  7. r.Use(chiMiddleware)
复制代码
路由功能
支持的请求方法
chi 支持常见的 HTTP 方法:
  1. r.Get("/", handler)       // GET
  2. r.Post("/", handler)      // POST
  3. r.Put("/", handler)       // PUT
  4. r.Delete("/", handler)    // DELETE
  5. r.Patch("/", handler)     // PATCH
  6. r.Head("/", handler)      // HEAD
复制代码
获取 URI 中的参数
路径参数用 {} 包裹,通过 chi.URLParam() 获取:
  1. r.Get("/{data}", func(w http.ResponseWriter, r *http.Request) {
  2.     data := chi.URLParam(r, "data")
  3.     w.Write([]byte("You sent: " + data))
  4. })
复制代码
示例请求:
  1. curl http://localhost:3000/hello
  2. # 输出:You sent: hello
复制代码
路由分组与嵌套
使用 r.Route() 实现路由分组和嵌套:
  1. r.Route("/api", func(r chi.Router) {
  2.     r.Get("/ping", func(w http.ResponseWriter, r *http.Request) {
  3.         w.Write([]byte("pong"))
  4.     })

  5.     r.Route("/user", func(r chi.Router) {
  6.         r.Get("/{id}", func(w http.ResponseWriter, r *http.Request) {
  7.             id := chi.URLParam(r, "id")
  8.             w.Write([]byte("User ID: " + id))
  9.         })
  10.     })
  11. })
复制代码
对应请求:
  1. curl http://localhost:3000/api/ping       # pong
  2. curl http://localhost:3000/api/user/123   # User ID: 123
复制代码
总结
chi 是 Go Web 开发中非常实用的一个框架,具备以下优点:
  • 极简设计,几乎无依赖
  • 原生支持中间件与路由嵌套
  • 路由语义清晰,扩展性强
  • 与 net/http 完全兼容

如果你希望构建一个轻量、高性能的 REST API 服务,chi 是一个非常值得尝试的选择。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 Suike Tech All Rights Reserved. 随客交流社区 (备案号:津ICP备19010126号) |Processed in 0.108130 second(s), 9 queries , Gzip On, MemCached On.
关灯 在本版发帖返回顶部
快速回复 返回顶部 返回列表