提问者:小点点

我可以创建一个中间件来自动保存用户的ip地址谁击中任何url在Go Lang


我刚开始使用Go lang,我用Django编写代码。 我想知道我可以创建一种中间件,它自动给我用户的IP地址谁击中了我的网站的任何url,并可以打印到日志? 请帮帮我,我是初学者。


共1个答案

匿名用户

要实现中间件,您必须创建一个满足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
}

此模式有时被称为装饰模式,有关更多信息,请参见以下链接:

  1. https://www.alexedwards.net/blog/making-and-using-middleware
  2. https://en.wikipedia.org/wiki/decorator_pattern