2016-11-30 60 views
12

我傳遞一個uuid使用ContextWithValue後續函數處理此*http.request。這個uuid被傳遞給授權頭部到一個REST調用來識別一個人。授權令牌已經過驗證,需要檢查授權令牌是否已授權。修復「不應該使用基本類型的字符串作爲關鍵context.WithValue」golint

我用:

ctx := context.WithValue(r.Context(), string("principal_id"), *id) 

但golint抱怨:

should not use basic type string as key in context.WithValue 

什麼是可以用來檢索該密鑰是不是基本類型是一個簡單的字符串,最好的選擇?

回答

17

只需使用一鍵式:

type key int 

const (
    keyPrincipalID key = iota 
    // ... 
) 

既然你已經定義了一個單獨的類型,它永遠不會發生碰撞。即使你有兩個包,pkg1.key(0) != pkg2.key(0)。還有:Go Blog about key collisions in context

相關問題