ContextのWithValueでのワーニング
ContextのWithValueで以下のようにstringを使おうとすると、should not use basic type string as key in context.WithValue
のwarningが出てしまいます。
ctx = context.WithValue(ctx, "user", user)
調べてみたところ、WithValueを使っている場所で好き勝手にkeyを設定すると、key名が被ってしまう可能性があるのというエラーのようでした。とても親切ですね。
解決策
utilを作成して、そこでWithValueの処理を一括して行うように修正をしました。
ポイントは以下の4点になります
- typeで
valueKey
を宣言する - constで必要な
valueKey
を宣言する -
WithValue
の関数の引数をvalueKey
にする
package ctxutil
import "context"
const (
// ポイント②
LayoutKey valueKey = iota
UserKey
)
// ポイント①
type valueKey int
// ポイント③
func WithValue(parent context.Context, key valueKey, v interface{}) context.Context {
return context.WithValue(parent, key, v)
}
呼び出し
呼び出しは以下のように書けます。
ctx = ctxutil.WithValue(ctx, ctxutil.UserKey, user)
以上です!