登录
首页 >  Golang >  Go问答

golng 获取 url 并 resp.Body.Close()

来源:stackoverflow

时间:2024-04-25 15:15:38 346浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《golng 获取 url 并 resp.Body.Close()》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在寻找 go 代码来获取 url,在大多数情况下,这是用于在 go 上获取 url 的代码:

func main() {
    for _, url := range os.Args[1:] {
        resp, err := http.Get(url)
        if err != nil {
            fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
            os.Exit(1)
        }
        b, err := ioutil.ReadAll(resp.Body)
        resp.Body.Close()
        if err != nil {
            fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
            os.Exit(1)
        }
        fmt.Printf("%s", b)
    }
}

我的问题为什么需要这里 resp.body.close() 以及这到底是做什么的?


解决方案


如果您深入研究 http 文档 https://golang.org/pkg/net/http/

用于生成响应的 get 方法是 response

func (c *client) get(url string) (resp *response, err error)

在响应源中:

// Body represents the response body.
        //
        // The response body is streamed on demand as the Body field
        // is read. If the network connection fails or the server
        // terminates the response, Body.Read calls return an error.
        //
        // The http Client and Transport guarantee that Body is always
        // non-nil, even on responses without a body or responses with
        // a zero-length body. It is the caller's responsibility to
        // close Body. The default HTTP client's Transport may not
        // reuse HTTP/1.x "keep-alive" TCP connections if the Body is
        // not read to completion and closed.
        //
        // The Body is automatically dechunked if the server replied
        // with a "chunked" Transfer-Encoding.
        Body io.ReadCloser

因此 close() 整理了用于获取 body 的资源

如果不这样做,响应(resp)将无法“保持活动”,我猜响应中的某些资源有可能无法回收

以上就是《golng 获取 url 并 resp.Body.Close()》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>