Sobes.tech
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.