Maison >développement back-end >Golang >Pourquoi est-ce que je reçois une erreur EOF lors du décodage XML à partir d'un corps de réponse HTTP dans Go ?

Pourquoi est-ce que je reçois une erreur EOF lors du décodage XML à partir d'un corps de réponse HTTP dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 09:04:30609parcourir

Why am I getting an EOF error when decoding XML from an HTTP response body in Go?

xml.NewDecoder(resp.Body).Decode donnant une erreur EOF dans Go

Lorsque vous essayez de décoder le XML à partir du corps de la réponse HTTP à l'aide xml.NewDecoder, vous pouvez rencontrer une erreur « EOF ». Cela se produit généralement lorsque vous avez déjà consommé le corps de la réponse, le rendant indisponible pour les tentatives ultérieures de décodage du XML.

Voici une ventilation de votre code :

<code class="go">conts1, err := ioutil.ReadAll(resp1.Body)</code>

Ce code lit le corps en utilisant ioutil.ReadAll, consommant efficacement la totalité de la réponse.

<code class="go">if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)</code>

Après avoir lu le corps avec ioutil.ReadAll, essayer de décoder le XML à partir du même corps (resp1.Body) entraînera une erreur EOF car le le contenu a déjà été consommé.

Solution :

Pour résoudre ce problème, stockez le corps de la réponse dans une variable avant de le consommer à l'aide d'ioutil.ReadAll. Cela vous permet de décoder le XML à partir de la réponse mise en mémoire tampon.

<code class="go">resp1Bytes, err := ioutil.ReadAll(resp1.Body)</code>

Ensuite, utilisez cette réponse mise en mémoire tampon pour le décodage :

<code class="go">if err := xml.NewDecoder(bytes.NewReader(resp1Bytes)).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn