在 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中文網其他相關文章!