Go 错误:读取Post请求的XML正文的EOF

Go 错误:读取Post请求的XML正文的EOF,go,Go,当我读取XML响应正文时,控制台上出现了错误:EOF 下面是我的代码 resp, err := http.Post(url, "application/xml", payload) if err != nil { response.WriteErrorString(http.StatusInternalServerError, err.Error()) return } defer resp.Body.Close() dec := xml.NewDecoder(resp.Bod

当我读取XML响应正文时,控制台上出现了
错误:EOF

下面是我的代码

resp, err := http.Post(url, "application/xml", payload)
if err != nil {
    response.WriteErrorString(http.StatusInternalServerError, err.Error())
    return
}

defer resp.Body.Close()
dec := xml.NewDecoder(resp.Body)

if debug == true {
    body, err := ioutil.ReadAll(resp.Body)
    fmt.Println("=========== Response ==================")
    if err != nil {
        fmt.Printf("error: %v", err)
        return
    }
    fmt.Println(string(body))
    fmt.Println("=========== Response Ends =============")
}

err = dec.Decode(respStruct)
我怀疑
ioutil.ReadAll
没有按预期工作

抛出此错误有什么原因吗?

可能已经阅读了resp.Body的内容。
因此出现了
EOF
消息

您可以在“”中看到相同的错误

首先读取
resp.Body
,并将字符串与一起使用可以避免重复读取和错误消息

注意:a表明在从流读取时,最佳做法仍然是使用
xml.Decoder
而不是
xml.Unmarshal


因此,请确保不要阅读
resp.Body
两次,它就会起作用。

那么
新解码器如何?这似乎工作得很好,但问题是我如何将此方法的响应读入字符串表明您在正确的轨道上,但在读取resp.Body时需要小心。我以前的答案()是先读取字符串中的resp.Body,然后使用UnMarshal而不是NewDecoder。