Sobes.tech
Junior — Middle

Může v Go dojít k situaci, kdy nedojde k uvolnění paměťových zdrojů, a to vede k únikům?

sobes.tech AI

Odpověď od AI

V Go jsou možné úniky paměti, i když jazyk má vestavěný sběrač odpadků, který automaticky uvolňuje nepoužívanou paměť. Nicméně, úniky se mohou vyskytnout, pokud program nadále drží odkazy na objekty, které již nejsou potřeba, například:

  • Globální proměnné nebo slices, do kterých jsou přidávány prvky, ale nejsou odstraňovány.
  • Kanály, které nejsou uzavřeny a nadále drží data.
  • Uzávěry, které zachycují velké struktury a nejsou uvolněny.

Proto jsou úniky v Go často spojeny spíše s logikou programu než s chybami v nízkoúrovňové správě paměti, a s logikou, která brání sběrači odpadků uvolnit objekty.

Příklad:

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

func addToCache(key string, data *Data) {
    cache[key] = data // Pokud se cache nevyčistí, data zůstanou v paměti
}

Pokud se cache nevyčistí, objekty v ní nebudou uvolněny, což povede ke zvýšení spotřeby paměti.