O que acontece se não fechar response.Body em Go? Vazamento de memória e outros problemas
Olá a todos! Comecei a estudar Go recentemente e estou escrevendo um cliente HTTP simples para obter dados de uma API. Tenho este código:
```go
resp, err := http.Get("https://api.example.com/data")
if err != nil {
log.Fatal(err)
}
// Não estou fechando resp.Body
data, _ := io.ReadAll(resp.Body)
fmt.Println(string(data))
```
Tudo funciona, os dados chegam. Mas notei que em muitos exemplos no Stack Overflow e na documentação do Go escrevem `defer resp.Body.Close()`. Sinceramente, não entendo por que isso é necessário, se o programa termina imediatamente após a leitura dos dados? O que de ruim pode acontecer se eu esquecer de fechar `response.Body`? Vazamento de memória? Lentidão no programa? Ou isso não é crítico para scripts pequenos? Explique, por favor, de forma simples, o que acontece nos bastidores. Desde já, obrigado!
<<>>
Por que fechar response.Body é criticamente importante
Você está certo de que em scripts curtos isso pode não se manifestar, mas em aplicações reais (servidores web, daemons de longa duração) ignorar o fechamento pode causar vazamentos de memória e esgotamento de recursos do sistema, como conexões TCP não liberadas.