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.