In der Webentwicklung ist es oft notwendig, Antworten von HTTP-Anfragen zu verarbeiten. Zu diesem Zweck wird die Funktion http.Get(url) in Go verwendet. Es stellt sich jedoch die Frage: Ist es notwendig, den Antworttext zu schließen, wenn während der GET-Anfrage ein Fehler auftritt?
Überlegungen zur Fehlerbehandlung
Gemäß allgemeinen Programmierprinzipien Wenn eine Funktion mehrere Werte zurückgibt, von denen einer ein Fehler ist, sollte der Fehler zuerst überprüft werden, bevor fortgefahren wird. Nicht-Fehlerwerte sollten bei Vorliegen eines Fehlers Nullwerte zurückgeben.
Verhalten von http.Get()
Die Dokumentation für http.Get() tut dies nicht von diesem Grundsatz abweichen. Daher sollte die Fehlerbehandlung wie folgt gehandhabt werden:
res, err := http.Get(url) if err != nil { log.Printf("Error: %s\n", err) return } defer res.Body.Close() // Read/work with body
Sonderfall für Umleitungen
JimB bestätigt, dass, wenn ein Fehler ungleich Null zurückgegeben wird, auch wenn der Wenn die Antwort ungleich Null ist, ist es nicht erforderlich, sie zu schließen. Es gibt jedoch eine Ausnahme bei Umleitungsfehlern. Die Antwort kann Kontext und zusätzliche Informationen darüber enthalten, wo die Umleitung fehlgeschlagen ist.
Nicht-Null-Antworttext mit Fehler schließen
Wenn Sie den Antworttext schließen möchten, wenn ein Fehler vorliegt Wenn Sie eine Antwort und einen Fehler ungleich Null angeben, können Sie dies in einem dieser Schritte tun Möglichkeiten:
res, err := http.Get(url) if err != nil { log.Printf("Error: %s\n", err) } if res != nil { defer res.Body.Close() // Read/work with body }
res, err := http.Get(url) if err != nil { log.Printf("Error: %s\n", err) } if res == nil { return } defer res.Body.Close() // Read/work with body
Garantie von Non-Nil Body
Die Dokumentation für http.Response garantiert, dass Response.Body niemals Null sein wird, selbst wenn Es liegen keine Antwortdaten vor oder der Text enthält eine Null Länge.
Fazit
Zusammenfassend lässt sich sagen, dass es nicht notwendig ist, den Antworttext im Falle eines Fehlers von http.Get() zu schließen, es sei denn, der Fehler hängt damit zusammen zu einer Umleitung. Es ist jedoch sicher, den Körper zu schließen, wenn die Antwort nicht Null ist, indem Sie einen der oben beschriebenen Ansätze verwenden.
Das obige ist der detaillierte Inhalt vonMuss ich den Antworttext nach einem HTTP-GET-Fehler in Go schließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!