Sobes.tech
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 defer elan 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
}