Go の context パッケージでは、context.WithValue を使用してリクエスト固有のデータを渡すことができます。 。ただし、複数のキーと値のペアを効率的に保存する方法は明確ではありません。
次のオプションを検討してください。
1. WithValue()
への複数回の呼び出し 毎回新しいキーと値のペアを使用して、WithValue() を複数回呼び出します。これは簡単ですが、面倒な場合もあります。
2.キーと値のペアを含む構造体
すべてのキーと値のペアを保持する構造体を作成し、それを単一の値として WithValue() に渡します。これにより、後ですべてのキーに簡単にアクセスできますが、大規模なデータ構造の不必要なコピーが必要になる可能性があります。
3.ハイブリッド ソリューション
キーと値のペアをマップに保存し、個々の値にアクセスするためのゲッターを提供するラッパー構造体を作成します。これにより、安全な同時アクセスが可能になり、大量のデータのコピーが回避されます。
ハイブリッド ソリューションの例を次に示します:
type Values struct { m map[string]string } func (v Values) Get(key string) string { return v.m[key] } func main() { v := Values{map[string]string{ "1": "one", "2": "two", }} ctx := context.Background() ctx2 := context.WithValue(ctx, "myvalues", v) fmt.Println(ctx2.Value("myvalues").(Values).Get("2")) }
出力:
two
最適なアプローチは、特定の要件によって異なります。多くのキーと値のペアを使用するパフォーマンスが重要なシナリオの場合は、ハイブリッド ソリューションをお勧めします。それ以外の場合は、WithValue() またはキーと値のペアを含む構造体を複数回呼び出す方が便利な場合があります。
以上がGo で context.WithValue を使用して複数のキーと値のペアを効率的に渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。