Heim > Backend-Entwicklung > Golang > Muss ich den Antworttext nach einem HTTP-GET-Fehler in Go schließen?

Muss ich den Antworttext nach einem HTTP-GET-Fehler in Go schließen?

Susan Sarandon
Freigeben: 2024-12-22 05:07:09
Original
452 Leute haben es durchsucht

Do I Need to Close the Response Body After an HTTP GET Error in Go?

Erfordern HTTP-Fehler das Schließen des Antwortkörpers?

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
Nach dem Login kopieren

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
}
Nach dem Login kopieren
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
Nach dem Login kopieren

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!

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