Net/HTTP ハンドラーでは、「defer req.Body.Close()」がよく見られます。 )」は、処理後にリクエスト本文を閉じるために使用されます。ただし、このステートメントの理想的な配置については議論の余地があります。
一部の開発者は、このステートメントを関数の直前の関数の最後に配置する必要があると主張しています。リターンステートメント。これにより、エラーが発生したかどうかに関係なく、すべての場合に本体が閉じられるようになります。
関数の先頭近くに配置することを好む人もいます。このアプローチにより、本体の早期終了が可能になり、リソースが解放され、不必要なメモリ消費が防止される可能性があります。
情報に基づいた意思決定を行うには、HTTP リクエストのライフサイクルを理解することが重要です。 HTTP/1.1 仕様によれば、サーバーはリクエスト本文を閉じる責任があります:
「サーバーは、応答を送信する前に、リクエスト ペイロードで送信されたリクエスト コンテンツを読み取って破棄する必要があります。」
これは、ボディを閉じる責任が主にハンドラーではなくサーバーにあることを意味します。
ハンドラー内でリクエスト本文を閉じることは技術的には可能ですが、一般的には不要であると考えられています。サーバーはリクエストの処理が完了すると、本文を自動的に閉じます。ハンドラー内でボディを不必要に明示的に閉じると、サーバーのプロセスに干渉し、潜在的な競合状態が発生する可能性があります。
そのため、ハンドラーから "defer req.Body.Close()" を省略することをお勧めします。全く。サーバーは期待どおりに本文を閉じて、HTTP リクエストが正しく処理されるようにします。
以上がNet/HTTP ハンドラーで「req.Body.Close()」を延期する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。