猿问

如何保存,然后再次提供 io 类型的数据。读者?

我想用通过HTTP调用检索的八卦数据进行多次解析。由于我想避免对每个解析进行调用,因此我想保存此数据并重用它。

我从网上得到的。获取 的类型为 。gocal 解析器需要,所以它工作。Bodyio.ReadCloserio.Reader

由于我只能检索一次,我可以保存它,但后来我不知道如何充当背部(到解析器,几次以考虑不同的解析条件)Bodybody, _ := io.ReadAll(get.Body)[]byteio.Readergocal


慕姐8265434
浏览 120回答 1
1回答

慕少森

如您所见,该读取器公开为 ,此读取器不可重用,因为它直接连接到底层连接*(可能是 tcp/utp/或任何其他流,如网络包下的读取器)。从连接中读取字节后,新字节将等待另一次读取。http.Response.Bodyio.Reader实际上,为了保存响应,您需要先将其排出,并将该结果保存在变量中。body, _ := io.ReadAll(get.Body)为了使用 Go 编程语言多次重复使用该字节段,标准 API 提供了缓冲读取器字节。NewReader.此缓冲区充分提供了重置([]字节)方法来重置缓冲区的状态。字节。Reader.Reset 对于多次读取相同的字节缓冲区(无分配)非常有用。相比之下,字节。每次调用新读取器时都会进行分配。最后,在对 的两次连续调用之间,应使用之前收集的字节缓冲区重置缓冲区。c.Parser如:buf := bytes.NewReader(body)// initialize the parserc.Parse()// process the result// reset the buf, parse againbuf.Reset(body)c.Parse()您可以尝试此版本 https://play.golang.org/p/YaVtCTZHZEP 它使用缓冲区,但接口和行为相似。strings.NewReader不是很明显,这是一般原则,传输读取标题,除非您消耗它,否则不会触及身体。另见那。
随时随地看视频慕课网APP

相关分类

Go
我要回答