Avatar ·

Was passiert, wenn man response.Body in Go nicht schließt? Speicherleck und andere Probleme

Hallo zusammen! Ich habe gerade angefangen, Go zu lernen, und schreibe einen einfachen HTTP-Client, um Daten von einer API abzurufen. Ich habe diesen Code: ```go resp, err := http.Get("https://api.example.com/data") if err != nil { log.Fatal(err) } // Ich schließe resp.Body nicht data, _ := io.ReadAll(resp.Body) fmt.Println(string(data)) ``` Alles funktioniert, die Daten kommen an. Aber mir ist aufgefallen, dass in vielen Beispielen auf Stack Overflow und in der Go-Dokumentation `defer resp.Body.Close()` geschrieben wird. Ehrlich gesagt verstehe ich nicht, warum das nötig ist, wenn das Programm direkt nach dem Lesen der Daten beendet wird? Was kann Schlimmes passieren, wenn ich vergesse, `response.Body` zu schließen? Speicherleck? Programmverlangsamung? Oder ist das für kleine Skripte überhaupt nicht kritisch? Bitte erklärt mir laienhaft, was unter der Haube passiert. Vielen Dank im Voraus! <<>>

Warum das Schließen von response.Body entscheidend ist

Sie haben recht, dass dies in kurzen Skripten möglicherweise nicht auftritt, aber in realen Anwendungen (Webserver, langlebige Daemons) kann das Ignorieren