Maison >développement back-end >Golang >Pourquoi est-ce que j'obtiens une erreur EOF lors du décodage XML dans Golang ?

Pourquoi est-ce que j'obtiens une erreur EOF lors du décodage XML dans Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 03:28:02553parcourir

Why Am I Getting an EOF Error When Decoding XML in Golang?

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

Le décodage XML d'un corps de réponse HTTP dans Golang peut entraîner dans une erreur "EOF" inattendue. Après enquête, il a été découvert que le corps de la réponse avait déjà été lu une fois, empêchant une autre fonction de le relire.

Problème :

L'extrait de code comprenait une ligne qui utilisait ioutil.ReadAll(resp1.Body) pour lire le corps de la réponse dans une variable chaîne. Cette étape a consommé le contenu du corps de la réponse, le rendant indisponible pour les lectures ultérieures.

Solution :

Pour résoudre ce problème, le code doit être modifié pour garantir que la réponse le corps n'est pas lu plusieurs fois. Ceci peut être réalisé en utilisant la fonction xml.Unmarshal directement sur le corps de la réponse sans le lire au préalable dans une variable de chaîne.

Code corrigé :

<code class="go">resp1, err := client.Do(req1)
error_handler(err)

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

Par en éliminant la ligne ioutil.ReadAll(resp1.Body), le code peut décoder avec succès le contenu XML du corps de la réponse sans rencontrer l'erreur EOF. Il est important de noter que le corps de la réponse est un io.ReadCloser, qui doit être fermé après utilisation à l'aide de la ligne defer resp1.Body.Close() pour libérer toutes les ressources système.

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