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