irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 71
- Tepkime puanı
- 2
- Puanları
- 8
Arkanı Topla
Programlamada bir dosya açtıysanız kapatmalı, bir veritabanı bağlantısı açtıysanız iade etmelisiniz. Genelde bunu fonksiyonun sonunda yaparız. Ama ya fonksiyonun ortasında bir hata oluşur ve return ile çıkılırsa? O zaman kapatma kodu çalışmaz ve kaynak sızıntısı (leak) oluşur.defer anahtar kelimesi, yanındaki fonksiyonu bulunduğu fonksiyon bitmeden hemen önce çalıştırır. Nerede return ettiğinizin önemi yoktur.
Kod:
package main
import ("fmt""os")
func dosyaOku() {fmt.Println("Dosya açılıyor...")f, err := os.Open("deneme.txt")if err != nil {fmt.Println("Hata:", err)return}
// Dosya açılır açılmaz kapatma emrini erteleyerek (defer) veriyoruz.<br>// Bu satır, fonksiyonun en sonunda çalışacak.<br>defer f.Close()<br><br>fmt.Println("Dosya üzerinde işlemler yapılıyor...")<br>// Burada 100 satır kod olabilir veya hata oluşup çıkılabilir.<br>// f.Close() her senaryoda çalışacaktır.<br>
}
func main() {// LIFO (Last In First Out) Mantığı// Defer'ler bir yığın (stack) gibi çalışır. En son giren, ilk çıkar.defer fmt.Println("1. Kapanış")defer fmt.Println("2. Kapanış")defer fmt.Println("3. Kapanış")
fmt.Println("Ana İşlem")<br>// Çıktı sırası: Ana İşlem -> 3 -> 2 -> 1<br>
}