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.