golangフレームワークのCHI
2887 ワード
1、特性
golangのhttpフレームワークはすでに多く、その原因を究明します:goのnet/httpはすでに大部分の仕事をして、1つのフレームワークの仕事量をカプセル化して、そんなに大きくありません.
しかし、林は大きくなって鳥も多くなって、一部のフレームワークのコードの品質は本当にお世辞を言う勇気がなくて、またいくつかのフレームワークは1山のものを縛って、完全にさわやかで簡潔な風格と逆行して、使うといつも1種の重い感じがします!
chiもhttpフレームワークですが、この品物は違います.
**このフレームワークを使うと、他の人はあなたのコードを見て、あなたがフレームワークを使っていないことを疑うかもしれません!**
2、どうして速いの?
ルーティングアルゴリズムは接頭辞ツリーを使用しており、最も速いインデックスアルゴリズムはハッシュテーブルよりも速い!
本当に.軽量級で、コードは本当に少なくて、そんなに曲がりくねっていません.
net/httpのみで、標準ライブラリに高品質のコードを追加します.
3、拡張性が良い
jwt、Timeout、RealIPなど多くのミドルウェアは、使用に伴って取ります.
すごいことに、handlerはnet/httpと完全に互換性があるので、コミュニティのすべての互換性のあるnet/httpのミドルウェアを直接使うことができます!
4,その軽量級について
極めて簡潔で効率的で、同時にそんなによく使われないがまた使う機能が欠けています.このとき他のフレームワークと比較すると,このCHIは,機能がやや少ないことがわかる.
しかし、効率を考えなくても、これは小さな欠点であり、小さな利点でもある.生まれつき縛られていないので、起手式はもっと軽くて、必要なときに追加して、もっと多くの選択があります.柔軟にその優者を選んで従うことができる.
4、どれくらい速いですか.
5、小さな例
golangのhttpフレームワークはすでに多く、その原因を究明します:goのnet/httpはすでに大部分の仕事をして、1つのフレームワークの仕事量をカプセル化して、そんなに大きくありません.
しかし、林は大きくなって鳥も多くなって、一部のフレームワークのコードの品質は本当にお世辞を言う勇気がなくて、またいくつかのフレームワークは1山のものを縛って、完全にさわやかで簡潔な風格と逆行して、使うといつも1種の重い感じがします!
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)
}