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