Go programlama dilinde defer deyimi, kendisini çevreleyen fonksiyon dönene kadar fonksiyonun çalışmasını erteler. Ertelenmiş fonksiyon çağrısının argümanları anında değerlendirilir, fakat fonksiyon çağrısı kendisini çevreleyen fonksiyon dönmeden işleme sokulmaz.

Temel defer kullanımı

package main

import "fmt"

func main() {
	
defer fmt.Println("merhaba")
fmt.Println("dünya")
	
}
/*Ekran çıktısı:
dünya
merhaba
*/

Yukarıdaki örnekteki kod bölümünü inceleyelim :

- defer fmt.Println("merhaba") ile ekrana " merhaba " yazdırılmasını istedik.

- fmt.Println("dünya") ile ekrana " dünya " yazdırılmasını istedik.
Kodumuza göre eğer defer deyimi kullanmamış olsaydık önce merhaba sonra dünya yazılırdı ; fakat biz defer deyimini kullandığımız için öncelikle " dünya " yazılmış oldu.

Defer yığını

package main

import "fmt"

func main() {
var x [3]string
x[0]="istanbaul"
x[1]="güzel"
x[2]="şehir"

	for i := 0; i<3; i++ {
		defer fmt.Println(x[i])
	}

}
/*Ekran çıktısı :
şehir
güzel
istanbul
*/

Örneğe baktığımızda x dizisinin son elemanının ilk önce ekran çıktısı olarak geldiğini görüyoruz.Bunun nedeni defer kullanımında son giren ilk çıkar.
Bizim örneğimizde de son giren x[3] yani " şehir " elamanıdır.