xml.NewDecoder(resp.Body).Decode 在 Go 中给出 EOF 错误
当尝试使用以下命令从 HTTP 响应正文中解码 XML 时xml.NewDecoder,您可能会遇到“EOF”错误。这种情况通常发生在您之前使用过响应正文,导致后续尝试解码 XML 时无法使用该正文。
以下是代码细分:
<code class="go">conts1, err := ioutil.ReadAll(resp1.Body)</code>
此代码读取正文使用 ioutil.ReadAll,有效地消耗整个响应。
<code class="go">if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil { fmt.Printf("error is : %v", err)</code>
使用 ioutil.ReadAll 读取正文后,尝试从同一正文 (resp1.Body) 解码 XML 将导致 EOF 错误,因为内容已被消耗。
解决方案:
要解决此问题,请在使用 ioutil.ReadAll 消耗响应正文之前将其存储到变量中。这允许您从缓冲响应中解码 XML。
<code class="go">resp1Bytes, err := ioutil.ReadAll(resp1.Body)</code>
然后,使用此缓冲响应进行解码:
<code class="go">if err := xml.NewDecoder(bytes.NewReader(resp1Bytes)).Decode(&v); err != nil { fmt.Printf("error is : %v", err) }</code>
以上是在 Go 中从 HTTP 响应正文解码 XML 时,为什么会收到 EOF 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!