[解決済み] response.Bodyを閉じないとどうなりますか?
2022-07-12 18:57:47
質問
Goで、いくつかのhttpの応答がありますが、時々呼び出すのを忘れてしまいます。
resp.Body.Close()
この場合、メモリリークが発生するのでしょうか?また
defer resp.Body.Close()
を記述しても大丈夫でしょうか?
client := http.DefaultClient
resp, err := client.Do(req)
defer resp.Body.Close()
if err != nil {
return nil, err
}
エラーが発生した場合はどうすればよいのでしょうか。
resp
または
resp.Body
はゼロなのか?
どのように解決するのですか?
<ブロッククオートこの場合、メモリリークが発生するのでしょうか?
これはリソースリークです。接続は再使用されず、ファイル記述子が解放されない場合は、開いたままにすることができます。
また、レスポンスオブジェクトを取得した直後に defer resp.Body.Close() を入れても問題ないでしょうか?
いいえ、ドキュメントに記載されている例に従い、エラーを確認後、すぐに閉じてください。
client := http.DefaultClient
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
から
http.Client
のドキュメントを参照してください。
返されたエラーが nil の場合、レスポンスには nil ではない Body が含まれ、ユーザはこれを閉じる必要があります。BodyがEOFまで読まれ、閉じられていない場合、クライアントの基礎となるRoundTripper(通常はトランスポート)は、その後の"keep-alive"要求のためにサーバーへの持続的なTCP接続を再利用できない可能性があります。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン