Golang进阶 —— 中间件的设计
以下是一个简单的Golang中间件设计示例,使用了一个简单的HTTP服务器和中间件:
package main
import (
"net/http"
)
// 定义一个中间件处理函数
type Middleware func(http.HandlerFunc) http.HandlerFunc
// 应用中间件
func ApplyMiddleware(fn http.HandlerFunc, middlewares ...Middleware) http.HandlerFunc {
for _, m := range middlewares {
fn = m(fn)
}
return fn
}
// 示例中间件
func MiddlewareExample(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// 在处理请求之前执行的代码
println("Before request handling")
// 调用下一个中间件或处理函数
next(w, r)
// 在处理请求之后执行的代码
println("After request handling")
}
}
// 示例处理函数
func Handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func main() {
// 创建一个服务 mux
mux := http.NewServeMux()
// 注册路由,应用中间件
mux.HandleFunc("/", ApplyMiddleware(Handler, MiddlewareExample))
// 启动HTTP服务器
http.ListenAndServe(":8080", mux)
}
这个示例代码定义了一个中间件处理函数MiddlewareExample
,它将在处理请求之前和之后打印消息。ApplyMiddleware
函数用于将中间件应用到处理函数上。在main
函数中,我们创建了一个HTTP服务,并将中间件应用到根路由上。当访问服务器根路径时,将会先执行中间件中的代码,然后是处理函数Handler
的代码,最后是中间件之后的代码。
评论已关闭