gpt4 book ai didi

go - 为什么在检查完请求体后必须关闭请求体?

转载 作者:IT王子 更新时间:2023-10-29 01:14:32 25 4
gpt4 key购买 nike

我见过几个示例,您从 r.Body 中读取数据,然后立即执行 defer r.Body.Close()。如果我们不关闭它会发生什么?

假设我有一个 http.Handler,我在其中解码 r.Body 的内容,如下所示:

func createFeedback(w http.ResponseWriter, r *http.Request) {
// ... Some code ...
f := feedback.New()
if err := json.NewDecoder(r.Body).Decode(f); err != nil {
return err
}
defer r.Body.Close()
// ... Some more code ...
}

为什么我们必须关闭 r.Body

最佳答案

这样做是为了防止连接的资源泄漏。 go官方文档中有一句话:

https://pkg.go.dev/net/http#Client

If the Body is not both read to EOF and closed, the Client'sunderlying RoundTripper (typically Transport) may not be able tore-use a persistent TCP connection to the server for a subsequent"keep-alive" request.

关于go - 为什么在检查完请求体后必须关闭请求体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com