Sobes.tech
Junior — Middle

Kan er in Go een situatie ontstaan waarin geheugenbronnen niet worden vrijgegeven, wat leidt tot lekken?

sobes.tech AI

Antwoord van AI

In Go zijn geheugenlekken mogelijk, hoewel de taal een ingebouwde garbage collector heeft die automatisch ongebruikte geheugen vrijmaakt. Echter, lekken kunnen optreden als het programma blijft verwijzingen naar objecten die niet meer nodig zijn, bijvoorbeeld:

  • Globale variabelen of slices waaraan elementen worden toegevoegd, maar die niet worden verwijderd.
  • Kanalen die niet worden gesloten en blijven gegevens vasthouden.
  • Closure die grote structuren vastleggen en niet worden vrijgegeven.

Daarom zijn lekken in Go vaak meer gerelateerd aan de logica van het programma dan aan fouten in laag-niveau geheugenbeheer, en aan de logica die de garbage collector verhindert om objecten vrij te geven.

Voorbeeld:

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

func addToCache(key string, data *Data) {
    cache[key] = data // Als de cache niet wordt opgeschoond, blijven de gegevens in het geheugen
}

Als de cache niet wordt opgeschoond, worden de objecten daarin niet vrijgegeven, wat leidt tot een toename in geheugenverbruik.