Junior
Go dilinde defer yapısı ile hangi kavram uygulanır?
sobes.tech yapay zeka
AI'dan gelen yanıt
defer yapısı, ertelenmiş fonksiyon yürütme kavramını uygular. Ertelenmiş fonksiyon, defer içeren fonksiyon tamamlanmadan hemen önce çalıştırılır.
Ana noktalar:
- Çalıştırma zamanı: Ertelenmiş fonksiyon, ana fonksiyonun sonunda çalıştırılır, hatta panik veya istisna olsa bile.
- Yığın: Ertelenmiş çağrılar bir yığın oluşturur. Son ertelenmiş çağrı ilk çalıştırılır (LIFO).
- Değişken yakalama: Ertelenmiş fonksiyonun argümanları,
deferbildiriminde bulundukları anda hesaplanır, yürütme sırasında değil.
Tipik kullanım örnekleri:
- Dosyaların, ağ bağlantılarının, mutexlerin kapanması.
- Durumun geri yüklenmesi (örneğin, küresel değişkenler veya bayraklar değiştirildikten sonra).
- Çalıştırma süresinin ölçülmesi.
// Dosyayı kapatmak için defer kullanımı örneği
func readFile(filename string) error {
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close() // Dosya fonksiyon bitmeden kapanır
// Dosyadan okuma...
return nil
}
// Ertelenmiş çağrı yığını örneği
func process() {
defer fmt.Println("İlk yığında")
defer fmt.Println("İkinci yığında")
defer fmt.Println("Üçüncü yığında") // En son çalıştırılır
fmt.Println("İşleme...")
}
Argümanlarla ertelenmiş çağrılar:
// Defer bildiriminde değişkenin değerinin yakalanması örneği
func demonstrateDeferArgEval() {
i := 0
defer fmt.Println("Defer'deki i değeri:", i) // i 0 olacak
i++
fmt.Println("İnkrement sonrası i değeri:", i) // i 1 olacak
}