Sobes.tech
Junior — Middle

Môže v Go dôjsť k situácii, keď sa neoslobodia pamäťové zdroje, čo vedie k únikom?

sobes.tech AI

Odpoveď od AI

V Go sú možné úniky pamäte, hoci jazyk má zabudovaný zberač odpadu, ktorý automaticky uvoľňuje nepoužívanú pamäť. Avšak, úniky môžu nastať, ak program naďalej drží odkazy na objekty, ktoré už nie sú potrebné, napríklad:

  • Globálne premenné alebo slices, do ktorých sa pridávajú prvky, ale nie sú odstraňované.
  • Kanály, ktoré sa neuzatvárajú a naďalej držia dáta.
  • Uzávierky, ktoré zachytávajú veľké štruktúry a nie sú uvoľnené.

Preto sú úniky v Go často viac spojené s logikou programu než s chybami v nízkoúrovňovej správe pamäte, a s logikou, ktorá bráni zberaču odpadu uvoľniť objekty.

Príklad:

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

func addToCache(key string, data *Data) {
    cache[key] = data // Ak sa cache nevyčistí, údaje zostanú v pamäti
}

Ak sa cache nevyčistí, objekty v nej nebudú uvoľnené, čo povedie k rastu spotreby pamäti.