我刚开始使用Go lang,我用Django编写代码。 我想知道我可以创建一种中间件,它自动给我用户的IP地址谁击中了我的网站的任何url,并可以打印到日志? 请帮帮我,我是初学者。
要实现中间件,您必须创建一个满足http.handler
接口的函数。
实现这一点的一种方法是使用decorator函数,它充当中间件:
func middleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// middleware code for example logging
log.Println(r.RemoteAddr)
next.ServeHTTP(w, r)
})
}
next
参数是实际的http.handler
。
下面是一个更完整的示例:
func main() {
var handler http.HandlerFunc = testHandler
// Here the handler is wrapped with the middleware
http.Handle("/test", middleware(handler))
}
func middleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// middleware code for example logging
log.Println(r.RemoteAddr)
next.ServeHTTP(w, r)
})
}
func testHandler(w http.ResponseWriter, r *http.Request) {
// your handler code
}
此模式有时被称为装饰模式,有关更多信息,请参见以下链接: