Go での HTTP リクエストのクローズとバックグラウンド処理
Go の HTTP 処理では、リソース管理を確保し、潜在的な問題を防ぐためにリクエストを適切にクローズすることが不可欠です。エラー。 202 Accepted ステータス コードで HTTP リクエストに応答し、バックグラウンドで処理を続行する場合、いくつかの方法が利用可能です。
ゴルーチンで Return または WriteHeader を使用する
コード スニペットでは、2 つのメソッドが示されています。
<code class="go">// Return: func index(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusAccepted) go sleep() return } // WriteHeader with goroutine: func index(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusAccepted) go sleep() }</code>
Return による適切な終了
HTTP ハンドラー関数から戻ると、リクエストが完了したことを示します。これは、ResponseWriter と RequestBody を使用したり、戻った後に読み取ったりするべきではないことを意味します。
最初のアプローチでは、WriteHeader 呼び出しの後に戻り、スリープ ゴルーチンを起動することで、リクエストが閉じられ、バックグラウンドで処理が続行されます。 。これは、Go の処理ガイドラインに準拠しているため、推奨されるアプローチです。
Return の省略
Go は最後に関数から自動的に戻るため、最後の return ステートメントは不要です。ステートメントが実行されます。ただし、明示的に返すことでコードの可読性が向上します。
自動 200 OK レスポンス
ハンドラーから戻るときに HTTP ヘッダーが設定されていない場合、Go は自動的にレスポンスを次のように設定します。 200 OK。したがって、202 Accepted レスポンスの場合、例で示したように WriteHeader を明示的に設定する必要があります。
Goroutine の使用上の注意
ハンドラー内で goroutine を使用する場合、これは重要です。戻った後に ResponseWriter および Request の値にアクセスすることを避けるため。これらの値は再利用される可能性があり、それらを読み取ろうとすると、予期しない動作が発生する可能性があります。
結論
Go で HTTP リクエストを適切に閉じるには、ハンドラーから返す必要があります。これにより、リソースが確実にクリーンアップされ、潜在的なエラーが防止されます。バックグラウンドで処理を続行する場合は、戻る前にゴルーチンを起動します。これらのガイドラインを採用すると、Go アプリケーションで効率的な HTTP 処理を実践できるようになります。
以上がGo で HTTP リクエストを適切に閉じてバックグラウンド処理を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。