⛓️
GoでHTTPミドルウェアをチェインするライブラリを書いた
GoでHTTPサーバを書くとき、ミドルウェアを利用することがある。
関数を入れ子にすることで数珠つなぎにできるが記述が長くなってしまう。
go-chiなどのHTTPフレームワークにはミドルウェアをチェインするメソッドが生えていることがある。
しかし、このメソッドはフレームワークに強く依存していて使い回しにくいのでライブラリとして切り出した。
どうやって使うの
このライブラリは以下のようにして使うことができる。
mux := http.NewServeMux()
handler := middlechain.Chain(mux,
someMiddleware1,
someMiddleware2,
someMiddleware3,
)
// handle http request...
http.ListenAndServe(":8080", handler)
実装
http.ServeMux
などのハンドラとミドルウェアを受け取って、内部で入れ子にして返すようにしている。
func Chain(h http.Handler, m ...func(http.Handler) http.Handler) http.Handler {
if len(m) == 0 {
return h
}
return m[0](Chain(h, m[1:cap(m)]...))
}
Discussion