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中文網其他相關文章!