登录
首页 >  Golang >  Go问答

调用者是否需要关闭 Request.Body 的 ReadCloser 流

来源:stackoverflow

时间:2024-03-23 16:12:25 422浏览 收藏

在 HTTP 请求处理过程中,调用者通常不需要手动关闭 `Request.Body` 的 `ReadCloser` 流。当请求完成时,底层 HTTP 客户端会自动关闭流,释放系统资源。因此,开发者无需担心流的关闭,只需将流用作只读接口即可。

问题内容

os.file 是一个 readcloser,defer fd.close() 返回错误:文件已关闭。我的问题是,无论请求何时完成,request.body 都会关闭吗? 如果我为http.request.body分配一个readcloser,我需要自己关闭readcloser吗?

package main
import (

"log"

"net/http"

"os"

)


func main() {

fd, err := os.Open("test")

if err != nil {

log.Fatal(err)

}

// return err: file is already closed

defer fd.Close()

//req, err := http.NewRequest("PUT", "http://localhost:8080/test.txt", fd)

if err != nil {

log.Fatal(err)

}


client := &http.Client{}
res, err := client.Do(req)
if err != nil {
    log.Fatal(err)
}
defer res.Body.Close()

}

解决方案


引用自Client.Do()

所以是的,你不需要关闭它吗?某些 ReadCloser 具有幂等 Clos​​e() 方法,这意味着多次关闭它不会造成任何损害,但正如您所经历的,在某些情况下多次调用 Clos​​e() 会导致错误。因此,当将其用于请求正文时,请勿关闭它。

本篇关于《调用者是否需要关闭 Request.Body 的 ReadCloser 流》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

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