首页 >后端开发 >Golang >Go中出现HTTP GET错误后是否需要关闭响应体?

Go中出现HTTP GET错误后是否需要关闭响应体?

Susan Sarandon
Susan Sarandon原创
2024-12-22 05:07:09450浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn