package main
import (
"fmt"
"net/http"
)
// 中间件函数类型
type MiddlewareFunc func(http.HandlerFunc) http.HandlerFunc
// 自定义中间件1
func LoggerMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, req *http.Request) {
fmt.Println("Logging:", req.Method, req.URL.Path)
next(w, req)
}
}
// 自定义中间件2
func LoggerMiddleware2(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, req *http.Request) {
fmt.Println("Logging2:", req.Method, req.URL.Path)
next(w, req)
}
}
// 使用中间件
func UseMiddleware(handler http.HandlerFunc, middleware ...MiddlewareFunc) http.HandlerFunc {
for i := len(middleware) - 1; i >= 0; i-- {
handler = middleware[i](handler)
}
return handler
}
// 处理请求的处理程序
func myHandler(w http.ResponseWriter, req *http.Request) {
fmt.Println("do handler")
w.Write([]byte("Hello, World!"))
}
func main() {
// 创建一个个中间件处理程序
handlerWithMiddleware := UseMiddleware(myHandler, LoggerMiddleware, LoggerMiddleware2)
http.HandleFunc("/", handlerWithMiddleware)
fmt.Println("Server is running on localhost:8080")
http.ListenAndServe(":8080", nil)
}
标签:http,自定义,fmt,req,中间件,HandlerFunc,func,Go
From: https://www.cnblogs.com/qcy-blog/p/18019457