Golang Web 框架 Chi
在构建轻量级 RESTful API 时,Go 的 chi 框架是一个极具优势的选择。chi 是一个专为 Go 设计的轻量级、高性能路由器,它不仅小巧,核心代码不足 1000 行,而且封装清晰,支持中间件、路由嵌套、路径参数等常用功能,十分适合 REST API 场景。不仅如此,目前非常流行的 Golang HTTP Server —— Caddy,也在底层采用了 chi 作为路由器,可见其稳定性与灵活性之高。
官方文档地址:https://go-chi.io/#/pages/getting-started
安装 chi确保你的项目已经通过 Go Modules 初始化:go mod init your-project-name
然后安装 chi v5 版本:go get -u github.com/go-chi/chi/v5
快速上手
使用 chi 构建一个简单 Web 服务非常快速,仅需三步:package main
import (
"net/http"
"github.com/go-chi/chi/v5"
)
func main() {
// 1. 初始化路由器
r := chi.NewRouter()
// 2. 注册路由
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World!"))
})
// 3. 启动服务
http.ListenAndServe(":3000", r)
}
运行之后,通过浏览器或 curl 访问 http://localhost:3000 即可看到输出 Hello World!。中间件支持chi 框架内置了丰富的中间件(共 26 种),如:
[*]middleware.Logger 日志记录
[*]middleware.Compress 响应压缩
[*]middleware.BasicAuth 基础认证
[*]middleware.NoCache 禁止缓存
使用方式非常简单,通过 r.Use() 引入:import "github.com/go-chi/chi/v5/middleware"
r := chi.NewRouter()
r.Use(middleware.Logger) // 启用日志中间件
自定义中间件
chi 也支持自定义中间件:func chiMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Middleware Print\n")) // 中间件前置操作
next.ServeHTTP(w, r) // 执行后续处理
})
}
r.Use(chiMiddleware)
路由功能
支持的请求方法
chi 支持常见的 HTTP 方法:r.Get("/", handler) // GET
r.Post("/", handler) // POST
r.Put("/", handler) // PUT
r.Delete("/", handler) // DELETE
r.Patch("/", handler) // PATCH
r.Head("/", handler) // HEAD
获取 URI 中的参数
路径参数用 {} 包裹,通过 chi.URLParam() 获取:r.Get("/{data}", func(w http.ResponseWriter, r *http.Request) {
data := chi.URLParam(r, "data")
w.Write([]byte("You sent: " + data))
})
示例请求:curl http://localhost:3000/hello
# 输出:You sent: hello
路由分组与嵌套
使用 r.Route() 实现路由分组和嵌套:r.Route("/api", func(r chi.Router) {
r.Get("/ping", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("pong"))
})
r.Route("/user", func(r chi.Router) {
r.Get("/{id}", func(w http.ResponseWriter, r *http.Request) {
id := chi.URLParam(r, "id")
w.Write([]byte("User ID: " + id))
})
})
})
对应请求:curl http://localhost:3000/api/ping # pong
curl http://localhost:3000/api/user/123 # User ID: 123
总结chi 是 Go Web 开发中非常实用的一个框架,具备以下优点:
[*]极简设计,几乎无依赖
[*]原生支持中间件与路由嵌套
[*]路由语义清晰,扩展性强
[*]与 net/http 完全兼容
如果你希望构建一个轻量、高性能的 REST API 服务,chi 是一个非常值得尝试的选择。
页:
[1]