Heim >Backend-Entwicklung >Golang >Warum erhalte ich beim Dekodieren von XML in Golang einen EOF-Fehler?
xml.NewDecoder(resp.Body).Decode gibt einen EOF-Fehler in Golang aus
Die Dekodierung von XML aus einem HTTP-Antworttext in Golang kann zur Folge haben in einem unerwarteten „EOF“-Fehler. Bei der Untersuchung wurde festgestellt, dass der Antworttext bereits einmal gelesen wurde, sodass eine andere Funktion ihn nicht erneut lesen konnte.
Problem:
Der Codeausschnitt enthielt eine Zeile das ioutil.ReadAll(resp1.Body) verwendet hat, um den Antworttext in eine Zeichenfolgenvariable einzulesen. Dieser Schritt verbrauchte den Inhalt des Antworttexts und machte ihn für nachfolgende Lesungen nicht mehr verfügbar.
Lösung:
Um dieses Problem zu beheben, sollte der Code geändert werden, um sicherzustellen, dass die Antwort Der Körper wird nicht mehrmals gelesen. Dies kann erreicht werden, indem die xml.Unmarshal-Funktion direkt auf dem Antworttext verwendet wird, ohne ihn zuerst in eine Zeichenfolgenvariable einzulesen.
Korrigierter Code:
<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>
Von Durch Eliminieren der Zeile ioutil.ReadAll(resp1.Body) kann der Code den XML-Inhalt erfolgreich aus dem Antworttext dekodieren, ohne dass der EOF-Fehler auftritt. Es ist wichtig zu beachten, dass der Antworttext ein io.ReadCloser ist, der nach der Verwendung mit der Zeile defer resp1.Body.Close() geschlossen werden sollte, um etwaige Systemressourcen freizugeben.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Dekodieren von XML in Golang einen EOF-Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!