mrkong 发表于 2025-8-6 09:44:18

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]
查看完整版本: Golang Web 框架 Chi