跟Go的Appengine:是否有一个http.Handle prehook或类似的东西?

时间:2013-05-09 17:35:15

标签: google-app-engine go

假设我有以下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 个答案:

答案 0 :(得分:10)

您有两种选择。

  1. 您可以使用http.Handler界面
  2. 您使用包装器HandleFunc包装所有http.HandlerFunc
  3. 因为看起来你想要一些简单的东西我会说明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)
    }