2013-05-09 71 views
7

假設我有以下init函數路由請求。Appengine與Go:是否有一個http.Handle prehook或類似的東西?

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最初希望你做的事情嗎?

回答

9

你有兩種選擇。

  1. 可以inplement的http.Handler接口
  2. 你包你所有的http.HandlerFunc用包裝材料HandleFunc。

因爲它看起來像你想簡單的東西,我會說明包裝

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) 
} 
+0

這看起來完全像我所需要的。我甚至考慮包裝功能,但已經感到沮喪,並且無法做到。 非常感謝! – 2013-05-09 18:10:42

+0

如果實施選項1,它會如何? – Ralf 2014-02-22 17:08:05

相關問題