Junior
Go dilində defer quruluşu ilə hansı konsept həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
defer quruluşu, funksiyanın gecikdirilmiş icrasını həyata keçirir. Gecikdirilmiş funksiya, defer ilə qeyd olunan funksiyanın sonunda birbaşa icra olunur.
Əsas nöqtələr:
- İcra vaxtı: Gecikdirilmiş funksiya, valideyn funksiyanın sonunda icra olunur, hətta panik və ya istisna baş verərsə belə.
- Yığın: Gecikdirilmiş çağırışlar yığın əmələ gətirir. Sonuncu gecikdirilmiş çağırış ilk icra olunacaq (LIFO).
- Dəyişənlərin ələ keçirilməsi: Gecikdirilmiş funksiyanın arqumentləri
deferelan edilən zaman hesablanır, icra zamanı deyil.
Tipik istifadə nümunələri:
- Faylların, şəbəkə əlaqələrinin, mutexlərin bağlanması.
- Vəziyyətin bərpası (məsələn, qlobal dəyişənlər və ya bayraqlar dəyişdirildikdən sonra).
- İcra vaxtının ölçülməsi.
// Faylı bağlamaq üçün defer nümunəsi
func readFile(filename string) error {
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close() // Fayl funksiyadan çıxmadan əvvəl bağlanacaq
// Fayldən oxuma...
return nil
}
// Gecikdirilmiş çağırışların yığını nümunəsi
func process() {
defer fmt.Println("İlk yığında")
defer fmt.Println("İkinci yığında")
defer fmt.Println("Üçüncü yığında") // Sonuncu icra olunacaq
fmt.Println("İşləmə...")
}
arqumentlərlə gecikdirilmiş çağırışlar:
// Gecikdirilmiş `defer` çağırışında dəyişənin dəyərinin ələ keçirilməsi nümunəsi
func demonstrateDeferArgEval() {
i := 0
defer fmt.Println("Defer-də i dəyəri:", i) // i 0 olacaq
i++
fmt.Println("İnkrementdən sonra i dəyəri:", i) // i 1 olacaq
}