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("Файл коркард мешавад...")
// Корҳои иловагӣ бо файл
}
Натиҷаи барнома:
Файл кушода мешавад.
Файл коркард мешавад...
Файл баста мешавад.