defer

defer ifadesi bir fonksiyonun işlemi tamamlandıktan sonra gerçekleşecek işlemleri tanımlamak için kullanılan bir ifadedir. Yani işlem sırasını değiştirir. defer ifadesinin arkasına yazılan kod ve fonksiyonlar işlemin en sonunda çalışırlar.

Genellikle açılan dosyaları kapatmak, hafızayı dolduran öğeleri sonlandırmak gibi performans işlemlerini gerçekleştirmek adına yazılırlar.

İlk örneğimizle başlayalım :

package main

import "fmt"

func FirstFunction()  {
  fmt.Println("İlk fonksiyon çalıştı")
}

func SecondFunction()  {
  fmt.Println("İkinci fonksiyon çalıştı")
}

func main()  {
  defer SecondFunction()
  FirstFunction()
}

İfademizi çalıştırdığımızda çıktımız aşağıdaki şekilde olacaktır.

İlk fonksiyon çalıştı
İkinci fonksiyon çalıştı

Dikkat ederseniz biz normal bir yazımda öncelikle ikinci fonksiyonun çalışmasını beklerdik. Fakat defer ifadesi ile yazıldığından dolayı, GO diğer fonksiyonların işlerinin yapıp bitirmesini bekledi ve sonrasında defer sonrasındaki ifadeleri çalıştırdı.

İkinci örneğimizde ise açık olan bir dosyayı kapatacağız :

İşlem öncesinde projemize bir file.txt dosyası oluşturacağız. İçine dilediğiniz bir metni kopyalayıp yapıştırın.


func main(){

file,err := os.Open("file.txt")
defer file.Close() // açma işlemi ve dosyada yapacak değişiklikler bittikten sonra sonlandır

fmt.Println("Dosya açıldı.")

// file değişiklik işlemleri

}

Yukarıdaki fonksiyonu çalıştırdığımızda öncelikle file.txt isimli dosyayı ön hafızaya alacaktır. Burada işlem sonunda hafızanın boşalması için file.txt isimli dosyamızı kapatmamız gerekir. Burada işlemler gerçekleştikten sonra kapatması için defer file.Close() ifadesi ile en sonda gerçekleşecek işlemi ekledik.

_HATIRLATMA: _ Bu konunda text ifadeleri içerisine metin yazdırma işlemleri ile ilgili Text Reading With GO konusuna bakabilirsiniz.