1. 程式人生 > >golang 框架 之 CHI

golang 框架 之 CHI

1,特性

golang 的 http框架已經有很多,究其原因:go 的net/http 已經做了大部分工作,封裝一個框架的工作量,沒有那麼的大。

不過呢,林子大了鳥也就多了,部分框架的程式碼質量實在不敢恭維,另有一些框架則綁定了一堆東西,完全跟 清爽簡潔的風格 背道而馳,用起來總有一種 笨重 的感覺!

chi 也是一個 http 框架,不過這貨是不同的。

用這個框架,別人看你程式碼可能會懷疑你沒用框架!

其特點:
    只做核心的事情
    rest api
    快(路由快,累贅少)
    分組路由
    **完全只用 net/http + 標準庫實現!**
    清爽(程式碼清爽,體積清爽)
    常見功能用中介軟體搞,可拔插

2,為啥快

路由演算法用的是 字首樹,最快的索引演算法
比雜湊表都快!

真.輕量級,程式碼真的很少,沒那麼多彎彎繞繞。

只用 net/http, 標準庫 再加上 高質量的程式碼。

3,可擴充套件性好

jwt、Timeout、RealIP 等眾多中介軟體,隨用隨取。

厲害的是:因為其handler完全相容 net/http,所以 社群所有相容net/http 的中介軟體都能拿來直接用!

4,關於其輕量級

極致的簡潔高效,同時就會缺少一些不那麼常用的但又會用到的功能;這時候對比其他框架,會發現這個CHI,功能略少。

不過,即使不考慮其高效,這是小缺點的同時,也是小優點。不天生繫結,起手式就更加輕便,需要的時候再加,也有更多的選擇;可以靈活的擇其優者而從之。

4,有多快

BenchmarkChi_Param           3000000           607 ns/op         432 B/op          3 allocs/op
BenchmarkChi_Param5          2000000           935 ns/op         432 B/op          3 allocs/op
BenchmarkChi_Param20         1000000          1944 ns/op         432 B/op          3 allocs/op
BenchmarkChi_ParamWrite      2000000           664 ns/op         432 B/op          3 allocs/op
BenchmarkChi_GithubStatic    2000000           627 ns/op         432 B/op          3 allocs/op
BenchmarkChi_GithubParam     2000000           847 ns/op         432 B/op          3 allocs/op
BenchmarkChi_GithubAll         10000        175556 ns/op       87700 B/op        609 allocs/op
BenchmarkChi_GPlusStatic     3000000           566 ns/op         432 B/op          3 allocs/op
BenchmarkChi_GPlusParam      2000000           652 ns/op         432 B/op          3 allocs/op
BenchmarkChi_GPlus2Params    2000000           767 ns/op         432 B/op          3 allocs/op
BenchmarkChi_GPlusAll         200000          9794 ns/op        5616 B/op         39 allocs/op
BenchmarkChi_ParseStatic     3000000           590 ns/op         432 B/op          3 allocs/op
BenchmarkChi_ParseParam      2000000           656 ns/op         432 B/op          3 allocs/op
BenchmarkChi_Parse2Params    2000000           715 ns/op         432 B/op          3 allocs/op
BenchmarkChi_ParseAll         100000         18045 ns/op       11232 B/op         78 allocs/op
BenchmarkChi_StaticAll         10000        108871 ns/op       67827 B/op        471 allocs/op

5,一個小例子

package main

import (
    "net/http"
    "github.com/go-chi/chi"
)

func main() {
    r := chi.NewRouter()
    r.Get("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("welcome"))
    })
    http.ListenAndServe(":3000", r)
}