在Golang中实现HTTP服务器的一个常见方法是使用标准库net/http
中的Handler
和HandlerFunc
。为了实现中间件,你可以创建一个Middleware
函数,它接受一个http.Handler
作为参数,并返回一个新的http.Handler
。
以下是一个简单的中间件实现示例:
package main
import (
"log"
"net/http"
)
// Middleware 函数,接受一个 Handler 并返回一个新的 Handler
func Middleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 在处理请求之前执行的代码
log.Println("Before request:", r.URL)
// 调用原始 Handler
next.ServeHTTP(w, r)
// 在处理请求之后执行的代码
log.Println("After request:", r.URL)
})
}
// 你的业务逻辑 Handler
func MyHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func main() {
// 使用中间件包装你的业务逻辑 Handler
http.Handle("/", Middleware(http.HandlerFunc(MyHandler)))
// 启动 HTTP 服务器
log.Fatal(http.ListenAndServe(":8080", nil))
}
在这个例子中,每次请求/
路径时,都会经过Middleware
中定义的逻辑,在处理请求前后记录日志。这就是一个简单的中间件实现,你可以根据需要添加更多的逻辑。