Heim > Backend-Entwicklung > Golang > Warum erhalte ich einen EOF-Fehler, wenn ich XML aus einem HTTP-Antworttext in Go dekodiere?

Warum erhalte ich einen EOF-Fehler, wenn ich XML aus einem HTTP-Antworttext in Go dekodiere?

Linda Hamilton
Freigeben: 2024-10-29 09:04:30
Original
610 Leute haben es durchsucht

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

xml.NewDecoder(resp.Body).Decode gibt einen EOF-Fehler in Go aus

Beim Versuch, XML aus dem HTTP-Antworttext mit zu dekodieren xml.NewDecoder, möglicherweise tritt ein „EOF“-Fehler auf. Dies geschieht normalerweise, wenn Sie den Antworttext zuvor verbraucht haben, sodass er für spätere Versuche, das XML zu dekodieren, nicht mehr verfügbar ist.

Hier ist eine Aufschlüsselung Ihres Codes:

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

Dieser Code liest den Text Verwenden von ioutil.ReadAll, wodurch effektiv die gesamte Antwort verbraucht wird.

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

Nach dem Lesen des Körpers mit ioutil.ReadAll führt der Versuch, XML aus demselben Körper (resp1.Body) zu dekodieren, zu einem EOF-Fehler, da der Der Inhalt wurde bereits verbraucht.

Lösung:

Um dieses Problem zu beheben, speichern Sie den Antworttext in einer Variablen, bevor Sie ihn mit ioutil.ReadAll konsumieren. Dadurch können Sie das XML aus der gepufferten Antwort dekodieren.

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

Verwenden Sie dann diese gepufferte Antwort zum Dekodieren:

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

Das obige ist der detaillierte Inhalt vonWarum erhalte ich einen EOF-Fehler, wenn ich XML aus einem HTTP-Antworttext in Go dekodiere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage