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

Mary-Kate Olsen
リリース: 2024-11-13 07:53:02
オリジナル
253 人が閲覧しました

How to Pass Multiple Key-Value Pairs Efficiently with context.WithValue in Go?

複数のキーと値のペアを context.WithValue に渡す

問題

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート