ホームページ >バックエンド開発 >Golang >「http.HandleFunc」内でコンテキスト値を適切に設定する方法

「http.HandleFunc」内でコンテキスト値を適切に設定する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-15 19:39:03984ブラウズ

How to Properly Set Context Values Within an `http.HandleFunc`?

HTTP ハンドラー内でのコンテキスト値の設定

コンテキスト値は、HTTP アプリケーションのハンドラー間でデータを受け渡す便利な方法を提供します。この Q&A は、http.HandleFunc 内でコンテキスト値を設定するためのベスト プラクティスを示します。

質問:

http.HandleFunc 内でコンテキスト値を効果的に設定する方法は?

答え:

質問で示されているアプローチ(リクエストオブジェクトの上書きを含む)は最適ではありません。代わりに、Request.WithContext メソッドを使用してリクエストの浅いコピーを作成し、新しいコピーにコンテキスト値を設定します。この浅いコピーへのポインタを返します。

コード:

func setValue(r *http.Request, val string) *http.Request {
  return r.WithContext(context.WithValue(r.Context(), myContext, val))
}

ハンドラー呼び出し:

別のハンドラーを呼び出すとき、変更したリクエストを次のように渡します:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
    anotherHandler.ServeHTTP(w, r)
})

このアプローチ

  • 元のリクエストは上書きされず、ダウンストリーム コードでの潜在的な問題が回避されます。
  • コンテキスト値は、後で呼び出されるハンドラーに正しく伝達されます。

以上が「http.HandleFunc」内でコンテキスト値を適切に設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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