Appengine with Go:是否存在http.Handle prehook或类似的东西



假设我有以下init函数路由请求。

func init() {
    http.HandleFunc("/user", handler1)
    http.HandleFunc("/user/profile", handler2)
    http.HandleFunc("/user/post", handler3)
    ....
    ....
}

所有这些都要求我有用户的配置文件。

我知道我可以

func handler1(w http.ResponseWriter, r *http.Request) {
    getUserdata()
    //Actual handler code
    ...
    ...
}

但是,有没有一种方法,我可以得到数据,而不把函数调用在每个处理程序?这是Go想让你做的事情吗?

您有两个选择。

  1. 可以实现http.Handler接口
  2. 你用包装器HandleFunc包装所有的http.HandlerFunc

因为看起来您想要一些简单的东西,所以我将演示WRapper

func Prehook(f http.HandlerFunc) http.HandlerFunc {
  return func(w http.ResponseWriter, r *http.Request) {
    getUserData()
    f(w, r)
  }
}
func init() {
    // use getUserData() call before your handler
    http.HandleFunc("/user", Prehook(handler1))
    // Don't use getUserData call before your handler
    http.HandleFunc("/user/profile", handler2)
}

最新更新