2013-05-09 5 views
7

次のinit関数のルーティング要求があるとします。Appengine with Go:http.Handleのプリフックなどがありますか?

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 
    ... 
    ... 
} 

ことができますが、私はすべてのハンドラに関数呼び出しをかけずにデータを取得することができます方法はありますか?知っていますかこれは、あなたが最初にやって欲しいと思っているものなのでしょうか?

答えて

9

2つのオプションがあります。

  1. あなたがラップhttp.Handlerインタフェース
  2. をinplementすることができ、すべてのラッパーHandleFuncとhttp.HandlerFunc

あなたは、単純な何かをしたいように見えるので、私はまさに私が必要なもののように見えるラッパー

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

を示します。私は機能をラッピングすることを見ていましたが、すでに不満を抱いていて、それを正しく行えませんでした。 ありがとうございました! –

+0

オプション1が実装されていると、どのように見えますか? – Ralf

関連する問題