ホームページ >バックエンド開発 >Golang >`http.Get()` エラーの後に HTTP 応答オブジェクトを閉じるべきでしょうか?

`http.Get()` エラーの後に HTTP 応答オブジェクトを閉じるべきでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 02:12:10767ブラウズ

Should I Close the HTTP Response Object After an `http.Get()` Error?

http.Get(url) の呼び出し中にエラーが発生した場合、応答オブジェクトを閉じる必要がありますか?

http.Get の呼び出し時(url) を使用すると、リクエスト中にエラーが発生するシナリオが発生する可能性があります。このような場合、応答オブジェクトを閉じることが必須ですか?

答え:

一般的なプログラミング原則によれば、関数が複数の値を返す場合、 、エラーを含む場合は、最初にエラー値を検査する必要があります。エラー (err != nil) がある場合は、適切なアクションを実行し、err 値が nil の場合にのみ続行する必要があります。

http.Get() の場合は、この概念に従います。エラーが発生した場合、次のような nil 応答が返されます。

return nil, someError

したがって、次のように処理する必要があります。

res, err := http.Get(url)
if err != nil {
    log.Printf("Error: %s\n", err)
    return
}

defer res.Body.Close()
// Read/work with body

エラーが発生し、リダイレクトの失敗により非 nil 応答が返された場合でも、応答本文を閉じる必要はありません。ただし、どうしてもそうしたい場合は、次のような条件付きチェックを使用できます。

if res != nil {
    defer res.Body.Close()
}

http.Response のドキュメントでは、応答データの有無に関係なく、Body プロパティが決して nil にならないことが保証されています。 .

以上が`http.Get()` エラーの後に HTTP 応答オブジェクトを閉じるべきでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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