http.Response.Write
导致'use of closed network connection'
关闭net.Conn
收到数据后,导致http.Response
错误。例如。我需要做这样的事情:
func Do(req *http.Request) *http.Response {
// ...
req.Write(conn)
var r = bufio.NewReader(conn)
var resp = http.ReadResponse(r, req)
conn.Close()
return resp
}
//...
var resp = Do(req)
resp.Write(anotherConn) // here is the error
,但最后一行给出了以上错误。您可以说一个明显的解决方案是conn.Close
之后的resp.Write
,但我这样做的原因是Do
必须将req
写到{{1} },它会自行创建,然后仅返回conn
。
我唯一感兴趣的是resp
和conn
之间的关系。我以为响应会将所有接收到的数据本身保存在req
中,然后不依赖于它从中接收数据的连接。但这似乎不是这样。
答案 0 :(得分:3)
ReadResponse
读取状态行和标头,然后在Respons.Body
中公开响应正文,该响应正文直接访问基础连接以即时读取正文,而不是加载整个正文(数兆字节)存储到内存中。这允许实现尽可能高效,例如。流处理主体,而不是将其全部加载到内存中然后进行处理。
在读取“正文”字段时,响应正文将按需流式传输。如果网络连接失败或服务器终止响应,则Body.Read调用将返回错误。