Sobes.tech
Junior — Middle

Y a-t-il une situation en Go où les ressources mémoire ne sont pas libérées, ce qui entraîne des fuites ?

sobes.tech IA

Réponse de l'IA

Les fuites de mémoire en Go sont possibles, bien que le langage dispose d’un ramasse-miettes intégré qui libère automatiquement la mémoire inutilisée. Cependant, des fuites peuvent survenir si le programme continue de maintenir des références à des objets qui ne sont plus nécessaires, par exemple :

  • Variables globales ou slices auxquels des éléments sont ajoutés mais qui ne sont pas supprimés.
  • Canaux qui ne sont pas fermés et continuent de retenir des données.
  • Fermetures qui capturent de grandes structures et ne sont pas libérées.

Ainsi, les fuites en Go sont souvent plus liées à la logique du programme qu’à des erreurs de gestion de la mémoire à bas niveau, et à une logique qui empêche le ramasse-miettes de libérer les objets.

Exemple :

var cache = make(map[string]*Data)

func addToCache(key string, data *Data) {
    cache[key] = data // Si le cache n’est pas nettoyé, les données seront retenues en mémoire
}

Si le cache n’est pas nettoyé, les objets qu’il contient ne seront pas libérés, ce qui entraînera une augmentation de la consommation de mémoire.