这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在构建轻量级 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)
- }
复制代码 中间件支持chi 框架内置了丰富的中间件(共 26 种),如:
使用方式非常简单,通过 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 是一个非常值得尝试的选择。
|