chi for Go:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 chi 以及为什么需要它?

\n\n

chi 是一个轻量级、高性能且符合 Go 语言习惯的 HTTP 路由器。它专为开发 Web 应用程序和 API 而设计,为开发者提供了强大且灵活的路由 HTTP 请求工具。

\n\n

与标准 net/http 包不同,chi 提供:

\n
    \n
  • 与 net/http 兼容: chi 完全实现了 http.Handler 接口,使其能够轻松集成到现有的 Go 代码和中间件中。
  • \n
  • 上下文路由: chi 使用 context.Context 在中间件和处理程序之间传递路由参数(例如用户 ID)。
  • \n
  • 嵌套路由(子路由器): 允许按逻辑块对路由进行分组(例如 /api/v1/users)。
  • \n
  • 中间件分组: 可以将中间件应用于整个路由器或单独的路由组。
  • \n
  • 内置支持 CORS、日志记录、压缩等常见任务。
  • \n
\n\n

chi 非常适合构建 REST API、微服务以及任何需要简洁、高性能且易于测试架构的 Web 应用程序。

\n\n

安装 chi

\n\n

要安装 chi,请使用标准的 Go 包管理器。确保您已安装 Go(版本 1.14 或更高)。

\n\n
go get -u github.com/go-chi/chi/v5
\n\n

执行此命令后,该库将添加到您的 go.mod 文件中。如果您使用 Go Modules(推荐),导入将如下所示:

\n\n
import "github.com/go-chi/chi/v5"
\n\n

通常也会安装中间件包:

\n\n
go get -u github.com/go-chi/cors\ngo get -u github.com/go-chi/chi/v5/middleware
\n\n

快速入门及代码示例

\n\n

让我们创建一个简单的 HTTP 服务器,用于响应 GET 请求。

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n\n    "github.com/go-chi/chi/v5"\n)\n\nfunc main() {\n    r := chi.NewRouter()\n\n    // 定义路由\n    r.Get("/hello", func(w http.ResponseWriter, r *http.Request) {\n        fmt.Fprintf(w, "Hello, chi!")\n    })\n\n    // 启动服务器\n    http.ListenAndServe(":3000", r)\n}
\n\n

运行此代码并在浏览器中打开 http://localhost:3000/hello。您将看到消息 "Hello, chi!"。

\n\n

chi 的主要方法和函数

\n\n

让我们看看 chi 库的关键方法。所有示例均假设您已经创建了路由器 r := chi.NewRouter()。

\n\n

1. Get(pattern string, handlerFn http.HandlerFunc)

\n

功能: 为指定路径模式的 HTTP GET 方法注册一个处理程序。

\n

参数:

\n
    \n
  • pattern — 路径字符串(例如 /users、/users/{id})。
  • \n
  • handlerFn — 符合 http.HandlerFunc 签名的处理函数。
  • \n
\n

示例:

\n
r.Get("/", func(w http.ResponseWriter, r *http.Request) {\n    w.Write([]byte("主页"))\n})
\n\n

2. Post(pattern string, handlerFn http.HandlerFunc)

\n

功能: 为 HTTP POST 方法注册一个处理程序。

\n

参数: 与 Get 类似。

\n

示例:

\n
r.Post("/users", func(w http.ResponseWriter, r *http.Request) {\n    // 创建用户的逻辑\n    w.WriteHeader(http.StatusCreated)\n    w.Write([]byte("用户已创建"))\n})
\n\n

3. Put(pattern string, handlerFn http.HandlerFunc)

\n

功能:

推荐