- 我有多个函数处理同一个
resp.Body
,第一个函数处理后调用了resp.Body.Close()
函数。第二个函数读时报了http2: response body closed
错误,请问如何多次读取http.Response.Body
? - 看到有一个解决办法是使用
func NopCloser(r io.Reader) io.ReadCloser
函数。文档描述是NopCloser returns a ReadCloser with a no-op Close method wrapping the provided Reader r.
。如果我使用这个方法后,我是否还应该调用Close()
方法?
有疑问加站长微信联系(非本文作者)

666特赞😢
666
还能说什么呢,太棒了
为什么不把resp.Body的值保存在变量里面呢
方法2的思路是对的,为了保证使用的一致性,Close方法还是需要调用的,具体实现看httputil包
如果Response在多个地方被使用并且里面的body被同步重复读取,那么有必要自定义一个类实现io.ReadCloser,类里面可以用bytes.Reader对象实现,这个类的Close接口可以调用bytes.Reader的Seek方法定位到buffer的起始位置以便下次重新使用
为何要多次读取呢?
如果你是用http下载,resp.Body可能有几个G,要是默认把body复制到内存不是早崩了?建议查查清楚什么是流。
看看这个,应该能帮到你们:https://cloud.tencent.com/developer/doc/1101
呵呵,你就扔个手册,就能帮助啦
resp 拿一次,存放需要的进内存