元件分享之後端元件——用于建構 Go HTTP 服務的輕量級、慣用且可組合的路由器chi
背景
近期正在探索前端、後端、系統端各類常用元件與工具,對其一些常見的元件進行再次整理一下,形成标準化元件專題,後續該專題将包含各類語言中的一些常用元件。歡迎大家進行持續關注。
元件基本資訊
- 元件:chi
- 開源協定:MIT License
内容
本節我們分享一個在Golang中用于建構 Go HTTP 服務的輕量級、慣用且可組合的路由器chi
它特别擅長幫助您編寫大型 REST API 服務,這些服務可以随着項目的增長和變化而保持可維護性。基于 Go 1.7 中引入的新
chi
context
包建構,用于處理處理程式鍊中的信号、取消和請求範圍的值。
該項目的重點是尋找一種優雅而舒适的設計來編寫 REST API 伺服器,該設計是在為我們的公共 API 服務提供支援的 Pressly API 服務開發期間編寫的,該服務反過來為我們所有的用戶端應用程式提供支援。
chi 設計的主要考慮因素是:項目結構、可維護性、标準 http 處理程式(僅限 stdlib)、開發人員生産力以及将大型系統解構為許多小部分。核心路由器
非常小(小于 1000 LOC),但我們還包含了一些有用/可選的子包:middleware、render 和docgen。我們希望你也喜歡它!
github.com/go-chi/chi
特征
- 輕量級- 在 ~1000 LOC 中用于 chi 路由器
- 快速- 是的,請參閱基準
- 100% 相容 net/http- 使用生态系統中任何相容的 http 或中間件 pkg
net/http
- 專為子產品化/可組合 API 設計- 中間件、内聯中間件、路由組和子路由器安裝
- 上下文控制- 建立在新
包之上,提供價值鍊、取消和逾時
context
- 強大的 - Pressly、CloudFlare、Heroku、99Designs 和許多其他公司的生産(見讨論)
- 文檔生成-
自動生成從您的源到 JSON 或 Markdown 的路由文檔
docgen
- Go.mod 支援- 從 v5 開始,支援 go.mod(請參閱CHANGELOG)
- 沒有外部依賴- 普通 ol' Go stdlib + net/http
簡單使用案例:
1、安裝
go get -u github.com/go-chi/chi/v5
2、使用
package main
import (
"net/http"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
)
func main() {
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("welcome"))
})
http.ListenAndServe(":3000", r)
}
本文聲明:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN0kjNzMjMkFWN4kTZyYTNyYzXyUTO1kDMzEzLcRDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
88x31.png
知識共享許可協定