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

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

Mary-Kate Olsen
リリース: 2024-12-18 02:12:10
オリジナル
763 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート