首頁 > 後端開發 > Golang > Go中出現HTTP GET錯誤後是否需要關閉響應體?

Go中出現HTTP GET錯誤後是否需要關閉響應體?

Susan Sarandon
發布: 2024-12-22 05:07:09
原創
452 人瀏覽過

Do I Need to Close the Response Body After an HTTP GET Error in Go?

HTTP 錯誤需要回應正文關閉嗎?

在 Web 開發中,通常需要處理來自 HTTP 請求的回應。 Go 中的 http.Get(url) 函數就是用於此目的。但是,這就提出了一個問題:如果 GET 請求過程中發生錯誤,是否需要關閉回應體?

錯誤處理注意事項

根據通用程式設計原理,當函數傳回多個值,其中一個是錯誤時,應先檢查錯誤後再繼續。非錯誤值在出現錯誤時應傳回零值。

http.Get() 的行為

http.Get() 的文檔並沒有偏離這個原則。因此,錯誤處理應如下處理:

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

defer res.Body.Close()
// Read/work with body
登入後複製

重定向的特殊情況

JimB 確認當傳回非零錯誤時,即使回應非零,沒有必要關閉它。但是,重定向錯誤的情況除外。回應可能包含有關重定向失敗位置的上下文和附加資訊。

關閉非零回應正文並出現錯誤

如果您想在出現錯誤時關閉回應正文非零回應和錯誤,您可以在其中一個中執行此操作方式:

res, err := http.Get(url)
if err != nil {
    log.Printf("Error: %s\n", err)
}
if res != nil {
    defer res.Body.Close()
    // Read/work with body
}
登入後複製
res, err := http.Get(url)
if err != nil {
    log.Printf("Error: %s\n", err)
}
if res == nil {
    return
}

defer res.Body.Close()
// Read/work with body
登入後複製

非零主體的保證

http.Response的文件保證Response.Body 永遠不會為零,即使沒有回應資料或正文為零

結論

總而言之,如果http.Get() 發生錯誤,則無需關閉回應正文,除非錯誤與此相關重定向。但是,如果回應非零,則使用上述方法之一關閉主體是安全的。

以上是Go中出現HTTP GET錯誤後是否需要關閉響應體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板