69

Contextおよびを使用して、 WithValuethis を処理する後続の関数にuuid を渡してい*http.requestます。この uuid は、認証ヘッダーで REST 呼び出しに渡され、個人を識別します。認証トークンが検証され、呼び出し自体が認証されているかどうかを確認するためにアクセスできる必要があります。

私が使用した:

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

しかし、ゴリントは次のように不満を述べています。

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

単純な文字列のような基本型ではないこのキーを取得するために使用できる最良のオプションは何ですか?

4

4 に答える 4

91

キータイプを使用するだけです:

type key int

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

別のタイプを定義したため、衝突することはありません。パッケージが 2 つある場合でも、pkg1.key(0) != pkg2.key(0).

関連項目:コンテキスト内のキーの衝突に関するブログに移動

于 2016-11-30T14:53:37.913 に答える
-10

上記の質問に対する簡単な回答を共有します。 GitHub リンク 要するに、キーとして型context.WithValue()が必要です。interface{}

これが役立つことを願っています。ありがとうございました。

于 2019-02-27T20:12:16.923 に答える