1 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
如您所見,該讀取器公開為 ,此讀取器不可重用,因?yàn)樗苯舆B接到底層連接*(可能是 tcp/utp/或任何其他流,如網(wǎng)絡(luò)包下的讀取器)。從連接中讀取字節(jié)后,新字節(jié)將等待另一次讀取。http.Response.Body
io.Reader
實(shí)際上,為了保存響應(yīng),您需要先將其排出,并將該結(jié)果保存在變量中。
body, _ := io.ReadAll(get.Body)
為了使用 Go 編程語言多次重復(fù)使用該字節(jié)段,標(biāo)準(zhǔn) API 提供了緩沖讀取器字節(jié)。NewReader
.
此緩沖區(qū)充分提供了重置([]字節(jié))
方法來重置緩沖區(qū)的狀態(tài)。
字節(jié)。Reader.Reset
對于多次讀取相同的字節(jié)緩沖區(qū)(無分配)非常有用。相比之下,字節(jié)。每次調(diào)用新讀取器
時(shí)都會(huì)進(jìn)行分配。
最后,在對 的兩次連續(xù)調(diào)用之間,應(yīng)使用之前收集的字節(jié)緩沖區(qū)重置緩沖區(qū)。c.Parser
如:
buf := bytes.NewReader(body)
// initialize the parser
c.Parse()
// process the result
// reset the buf, parse again
buf.Reset(body)
c.Parse()
您可以嘗試此版本 https://play.golang.org/p/YaVtCTZHZEP 它使用緩沖區(qū),但接口和行為相似。strings.NewReader
不是很明顯,這是一般原則,傳輸讀取標(biāo)題,除非您消耗它,否則不會(huì)觸及身體。另見那。
- 1 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報(bào)