1 回答

TA貢獻2019條經驗 獲得超9個贊
如您所見,該讀取器公開為 ,此讀取器不可重用,因為它直接連接到底層連接*(可能是 tcp/utp/或任何其他流,如網絡包下的讀取器)。從連接中讀取字節后,新字節將等待另一次讀取。http.Response.Body
io.Reader
實際上,為了保存響應,您需要先將其排出,并將該結果保存在變量中。
body, _ := io.ReadAll(get.Body)
為了使用 Go 編程語言多次重復使用該字節段,標準 API 提供了緩沖讀取器字節。NewReader
.
此緩沖區充分提供了重置([]字節)
方法來重置緩沖區的狀態。
字節。Reader.Reset
對于多次讀取相同的字節緩沖區(無分配)非常有用。相比之下,字節。每次調用新讀取器
時都會進行分配。
最后,在對 的兩次連續調用之間,應使用之前收集的字節緩沖區重置緩沖區。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 它使用緩沖區,但接口和行為相似。strings.NewReader
不是很明顯,這是一般原則,傳輸讀取標題,除非您消耗它,否則不會觸及身體。另見那。
- 1 回答
- 0 關注
- 98 瀏覽
添加回答
舉報