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 ?
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!