在Web请求之前执行功能

我试图在每个 Web 请求之前执行一个函数。我有一个简单的Web服务器:


func h1(w http.ResponseWriter, r *http.Request) {

  fmt.Pprintf("handler: %s\n", "h1")

}

func h2(w http.ResponseWriter, r *http.Request) {

  fmt.Pprintf("handler: %s\n", "h2")

}    

func h3(w http.ResponseWriter, r *http.Request) {

  fmt.Pprintf("handler: %s\n", "h3")

}    


func main() {

  http.HandleFunc("/", h1)

  http.HandleFunc("/foo", h2)

  http.HandleFunc("/bar", h3)


  /*

    Register a function which is executed before the handlers,

    no matter what URL is called.

  */


  http.ListenAndServe(":8080", nil)

}

问题:有没有简单的方法可以做到这一点?


哈士奇WWW
浏览 202回答 1
1回答

慕无忌1623718

包装每个HandlerFuncs。func WrapHandler(f HandlerFunc) HandlerFunc {  return func(w http.ResponseWriter, r *http.Request) {    // call any pre handler functions here    mySpecialFunc()    f(w, r)  }}http.HandleFunc("/", WrapHandler(h1))由于Function是Go中的一等值,因此可以轻松地包装,咖喱它们或其他您可能要使用它们做的事情。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go