2016-01-24 72 views
2

在GAE Go中,爲了記錄,我們需要使用appengine.NewContext(r)創建一個新的上下文,它返回context.ContextGoogle App Engine context.Context vs gorilla context

如何使用此上下文在請求範圍設置/獲取變量?在Gorilla中,Context在上下文中有一個乾淨的Set/Get函數,這是我想在我的代碼中使用的。但是我不想導入2個不同的上下文包。

GAE日誌迫使您使用context.Context

//handlerFunc 

func MyFunc(w http.ResponseWriter, r *http.Request) { 
    ctx := appengine.NewContext(r) 
    // I want to set request scoped variables in context and pass it to doSomething. 
    doSomething(ctx,w,r); 
} 

func doSomething(ctx context.Context, w http.ResponseWriter, r *http.Request) { 
    log.Debugf(ctx, "Beginning doSomething"); //requires context parameter 
    // get the request scoped variables from context. How? Use Gorilla Context? 
} 
+0

創建自定義處理程序類型(將上下文作爲參數之一),並讓您的路由器或某些中間件(首先在鏈中)調用NewContext來初始化它。 – elithrar

回答

0
import (
    "golang.org/x/net/context" 
    gorillacontext "github.com/gorilla/context"  
) 

我知道這是不是你想要的答案,但有沒有辦法解決它,因爲在圍棋標準庫(由App Engine的使用)「context」包不提供與Gorilla的'context'包相比,您想要的功能。如果你想使用額外的框架來定義他們自己的「上下文」包,你將需要使用多個導入。

關於groups discussion上的這兩個上下文有一個很好的觀點,那就是Gorilla的上下文可能會被錯誤地命名,因爲它們都用於不同的目的 - 「App Engine存儲憑證來發出RPC請求;大猩猩只是一個請求全局變量的容器「。