如您所见,该读取器公开为 ,此读取器不可重用,因为它直接连接到底层连接*(可能是 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不是很明显,这是一般原则,传输读取标题,除非您消耗它,否则不会触及身体。另见那。