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!