Sobes.tech
Middle

оператори defer дар забони Go чист?

sobes.tech AI

Ҷавоб аз AI

оператори defer барои иҷрои дарозмуддат функсия ё усул истифода мешавад. Функсияҳое, ки бо defer нишон дода шудаанд, ҳангоми баромадан аз функсия, ки онҳоро дар бар мегирад, фавран иҷро мешаванд.

Принсипҳои кории defer:

  • Вай ҳангоми баромадан аз функсияи ҳозира, ки метавонад ба таври оддӣ ё бо паника бошад, иҷро мешавад.
  • Бисёре аз defer дар як функсия дар тартиби LIFO (Last-In, First-Out) иҷро мешаванд.
  • Барои тоза кардани захираҳо, масалан, бастани файлҳо ё пайвастҳои шабакавӣ, муфид аст.

Маслиҳат барои истифода:

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("Файл кушода мешавад.")

	file, err := os.Open("example.txt")
	if err != nil {
		// Идоракунии хато
		return
	}

	// Баста шудани файл дар вақти баромад
	defer file.Close()
	defer fmt.Println("Файл баста мешавад.") // Ин `defer` аввал иҷро мешавад (LIFO)

	fmt.Println("Файл коркард мешавад...")

	// Корҳои иловагӣ бо файл
}

Натиҷаи барнома:

Файл кушода мешавад.
Файл коркард мешавад...
Файл баста мешавад.