Defer

defer, Go dilindəki xüsusi bir açar sözdür və müəyyən bir funksiyanın sonunda icra ediləcək funksiyaları və ya ifadələri təyin etmək üçün istifadə olunur. Defer ifadələri, funksiyanın sonunda nə olursa olsun, yəni funksiyanın hər hansı bir səbəbdən sona çatması halında belə icra ediləcəkdir.

Defer ifadələrini istifadə edərək, bir funksiyanın sonunda açılmış faylları, bağlanmamış verilənlər bazası bağlantılarını, şəbəkə bağlantılarını və s. tez və təhlükəsiz bir şəkildə bağlamaq mümkündür.

Nümunə olaraq, bir fayl açılır və defer ilə funksiyanın sonunda fayl bağlanılır:

package main

import (
	"fmt"
	"os"
)

func main() {

	f, err := os.Open("example.txt")
	if err != nil {
		fmt.Println(err)
		return
	}

	defer f.Close()

	// faylı oxuma
	b := make([]byte, 1024)
	n, err := f.Read(b)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(string(b[:n]))
}

Bu nümunədə, os.Open funksiyası istifadə edilərək “example.txt” faylı açılır. defer ifadəsi istifadə edilərək fayl bağlama əməliyyatı funksiyanın sonunda icra ediləcək şəkildə planlaşdırılır. Daha sonra, Read funksiyası istifadə edilərək faylın məzmunu oxunur və ekrana çap edilir.

Burada diqqət edilməli mühüm bir məqam, defer ifadəsinin ən sona yazılmamasıdır. defer ifadəsi, bağlanacaq olan faylı açan ifadə ilə eyni blokda olmalıdır. Əks halda, defer ifadəsi funksiyanın sonuna qədər gözləməyə davam edəcəkdir.