Heim >Backend-Entwicklung >Golang >Warum erhalte ich einen EOF-Fehler, wenn ich XML aus einem HTTP-Antworttext in Go dekodiere?
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>
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 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>
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>
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!