我们知道 handler 可以这么写:
func messageHandler(message string) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(message)
})
}
我们可以通过传递一个 next handler 代替 message 来创建一个 handler 链,来实现 middleware 的功能。
func exampleMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Our middleware logic goes here...
next.ServeHTTP(w, r)
})
}
middleware 有这样的签名func(http.Handler) http.Handler
因为它返回 http.Handler,所以可以直接用在 http.Handle
函数里。
http.Handle("/", middlewareOne(middlewareTwo(finalHandler)))