Junior — Middle
შეიძლება თუ არა Go-ში სიტუაცია, როდესაც მეხსიერების რესურსები არ გამოთავისუფლდება და ეს გამოიწვევს სითხეებს?
sobes.tech AI
პასუხი AI-სგან
Go dilində yaddaş sızıntıları mümkün ola bilər, baxmayaraq ki, dilin daxilində avtomatik olaraq istifadə olunmayan yaddaşı azad edən toplayıcı (garbage collector) mövcuddur. Ancaq, sızıntılar baş verə bilər, əgər proqram artıq lazım olmayan obyektlərə istinadları saxlamağa davam edərsə, məsələn:
- Qlobal dəyişənlər və ya slices, onlara elementlər əlavə edilir, lakin silinmir.
- Bağlanmayan kanallar və məlumatları saxlayan.
- Böyük strukturları tutan və azad olunmayan bağlamalar.
Bu səbəbdən, Go-da sızıntılar çox vaxt proqramın məntiqi ilə əlaqəlidir, aşağı səviyyəli yaddaş idarəetmə səhvlərindən yox, və obyektləri azad etməyə mane olan məntiq ilə əlaqəlidir.
Nümunə:
var cache = make(map[string]*Data)
func addToCache(key string, data *Data) {
cache[key] = data // Əgər cache təmizlənməzsə, məlumatlar yaddaşda saxlanılır
}
Əgər cache təmizlənməzsə, onun içindəki obyektlər azad olunmayacaq və yaddaş istifadəsinin artmasına səbəb olacaq.