Goの標準パッケージを使ったプログラミングに慣れるために、net/httpだけでミドルウェアを書いてみました。
next.ServeHTTP(w, r)の前に書くか、後に書くかで、いつ処理されるかが決まるようです。
package main
import (
"net/http"
)
func middleware1(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("before middleware\n"))
next.ServeHTTP(w, r)
})
}
func middleware2(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
next.ServeHTTP(w, r)
w.Write([]byte("after middleware\n"))
})
}
func main() {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World\n"))
})
http.Handle("/", middleware1(middleware2(handler)))
http.ListenAndServe(":8080", nil)
}
動かしてみる
curl http://localhost:8080
before middleware
Hello World
after middleware