ホームページ >バックエンド開発 >Golang >context.WithValue() を使用して複数のキーと値のペアを効率的に渡す方法は?

context.WithValue() を使用して複数のキーと値のペアを効率的に渡す方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-13 10:01:02261ブラウズ

How to Efficiently Pass Multiple Key-Value Pairs with context.WithValue()?

context.WithValue: 複数のキーと値のペアの追加

Go の context パッケージを使用すると、開発者はリクエスト固有のデータをリクエスト処理に渡すことができます。 context.WithValue() 関数を使用する関数。この関数は、指定されたキーと値のペアを使用して、親コンテキストのコピーである新しいコンテキストを作成します。

コンテキスト内の複数のキーと値のペア

時複数のキーと値のペアを扱う場合、いくつかのオプションがあります:

  1. 反復アプローチ: context.WithValue() を複数回呼び出し、そのたびに前の呼び出しから返されたコンテキストを渡します。 。このアプローチは面倒になる可能性があります。
  2. 構造体としての値: すべてのキーと値のペアを含む構造体を定義し、その構造体を値として渡します。これにより、データの受け渡しが簡素化されますが、個々の値に個別にアクセスする場合、不必要なコピーが発生する可能性があります。
  3. ハイブリッド ソリューション: キーと値のペアのマップを非表示にするラッパー構造体を作成します。これにより、大規模なデータのコピーを回避しながら、キーによる値への高速アクセスが可能になります。構造体は次のようになります。
type Values struct {
    m map[string]string
}

func (v Values) Get(key string) string {
    return v.m[key]
}

この構造体を使用すると、次のようにコンテキストに追加できます。

v := Values{map[string]string{
    "1": "one",
    "2": "two",
}}

c := context.WithValue(c, "myvalues", v)
fmt.Println(c.Value("myvalues").(Values).Get("2")) // Prints "two"

パフォーマンスに関する考慮事項

最適なアプローチは、特定のユースケースによって異なります:

  • 反復アプローチ: 高速アクセスを必要としない少数のキーと値のペアに適しています。
  • 構造体の値: 多数のキーと値のペアを渡し、個々の値に効率的にアクセスする必要がある場合に適しています。
  • ハイブリッド ソリューション:速度とメモリ効率の妥協点。パフォーマンスが重要ではない場合に適しています。

コンテキストを覚えておいてください。コンテキストは不変であるため、新しいキーと値のペアを追加するたびに、新しいコンテキストが作成されます。アプローチを選択するときは、キーと値のペアの数とパフォーマンス要件を考慮してください。

以上がcontext.WithValue() を使用して複数のキーと値のペアを効率的に渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。