HTTP ハンドラーでのコンテキスト値の操作
HTTP ハンドラー内でコンテキスト値を設定することは、リクエスト ハンドラー間でデータを共有するために重要です。 Go の HTTP パッケージでは、ハンドラーの登録に http.HandleFunc 関数がよく使用されます。ただし、*r = *r.WithContext(ctx) を使用してコンテキスト値を設定するアプローチには懸念が生じます。
推奨アプローチ
リクエスト オブジェクトの上書きを避けるため、予期しない動作が発生する可能性があるため、変更されたコンテキスト値を含むリクエストの新しい浅いコピーを返すことが最善です。
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") })
このアプローチにより、元のリクエスト オブジェクトは変更されず、更新されたコンテキストが確実に反映されます。
更新されたリクエストの受け渡し
ハンドラーが別のハンドラーを呼び出す必要がある場合、更新されたリクエスト オブジェクトを新しいハンドラーに渡すことが重要です。そうしないと、変更されたコンテキスト値を後続のハンドラーで使用できなくなります。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") someOtherHandler.ServeHTTP(w, r) })
これらのベスト プラクティスに従うことで、HTTP ハンドラー内でコンテキスト値を効果的に管理でき、効率的なデータ共有とリクエスト ハンドラー間のシームレスな移行が可能になります。 .
以上がGo HTTP ハンドラーでコンテキスト値を安全に操作するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。