Heim >Backend-Entwicklung >Golang >Warum führen aufeinanderfolgende Golang-HTTP-Anfragen zu unerwarteten EOF-Fehlern?
Unerwartete EOF-Fehler in Golang-HTTP-Anfragen während aufeinanderfolgender Aufrufe
In einem Versuch, ungewöhnliche Fehler zu beheben, die bei der Verwendung des Standardpakets net/http aufgetreten sind , ein Benutzer meldete zeitweilige EOF-Ausnahmen (End of File), wenn er mehrere HTTP-Anfragen nacheinander stellte.
Der Code Das vom Benutzer bereitgestellte Snippet enthält Testfunktionen für GET- und PUT-Anfragen, bei denen während der Ausführung sporadisch Fehler auftraten.
Fehlerbehebung des Problems
Nach der Analyse des Codes wurde es entdeckt dass die zugrunde liegende Ursache mit einer unsachgemäßen Bearbeitung der Anfrage zusammenhängt. Insbesondere wurde das Req.Close-Feld nicht explizit auf true gesetzt.
Im bereitgestellten Code wurde die defer resp.Body.Close()-Syntax verwendet, um das Schließen des Antworttexts zu verarbeiten. Dies erwies sich jedoch als unzureichend und es war notwendig, Req.Close auf „true“ zu setzen, um eine ordnungsgemäße Anforderungsverarbeitung sicherzustellen.
Aktualisierter Code
Der folgende Codeausschnitt zeigt, wie die korrekte Einstellung erfolgt Req.Close:
client := &http.Client{} req, err := http.NewRequest(method, url, httpBody) // **NOTE** this !! req.Close = true req.Header.Set("Content-Type", "application/json") req.SetBasicAuth("user", "pass") resp, err := client.Do(req) if err != nil { // whatever } defer resp.Body.Close() response, err = ioutil.ReadAll(resp.Body) if err != nil { // Whatever }
Auflösung
Das Setzen von Req.Close auf „true“ garantiert effektiv, dass die HTTP-Anfrage korrekt geschlossen wird, wodurch verhindert wird, dass der EOF-Fehler auftritt. Durch die Implementierung dieser Änderung wurden die Testfunktionen des Benutzers bei mehreren Anfragen konsistent bestanden und das Problem behoben.
Das obige ist der detaillierte Inhalt vonWarum führen aufeinanderfolgende Golang-HTTP-Anfragen zu unerwarteten EOF-Fehlern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!