Junior — Middle
Pode ocorrer em Go uma situação em que os recursos de memória não sejam libertados, levando a vazamentos?
sobes.tech IA
Resposta da IA
Em Go, vazamentos de memória são possíveis, embora a linguagem tenha um coletor de lixo embutido que libera automaticamente a memória não utilizada. No entanto, vazamentos podem ocorrer se o programa continuar a manter referências a objetos que não são mais necessários, por exemplo:
- Variáveis globais ou slices aos quais são adicionados elementos, mas que não são removidos.
- Canais que não são fechados e continuam a reter dados.
- Closures que capturam grandes estruturas e não são liberadas.
Assim, vazamentos em Go estão mais relacionados à lógica do programa do que a erros na gestão de memória de baixo nível, e à lógica que impede o coletor de lixo de liberar objetos.
Exemplo:
var cache = make(map[string]*Data)
func addToCache(key string, data *Data) {
cache[key] = data // Se o cache não for limpo, os dados serão retidos na memória
}
Se o cache não for limpo, os objetos nele não serão liberados, levando ao aumento do consumo de memória.