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

I'm getting error: EOF on console when I read the XML response body.

Below is my code.

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)

I suspect ioutil.ReadAll is not working as expected.

Is there a reason why it's throwing this error?

xml.NewDecoder(resp.Body) might already have read the content of resp.Body.
Hence the EOF message.

You can see the same error in "xml.NewDecoder(resp.Body).Decode Giving EOF Error"

Reading the resp.Body first, and using the string with xml.Unmarshal would avoid the double read and the error message.

Note: a similar answer shows that the best practice remains to use xml.Decoder instead of xml.Unmarshal when reading from streams.
So make sure you don't read resp.Body twice, and it will work.