Junior
Koji koncept se implementira pomoću konstrukcije defer u jeziku Go?
sobes.tech АИ
Одговор од АИ
Konstrukcija defer implementira koncept odložene izvršavanja funkcije. Odložena funkcija se izvršava neposredno pre završetka funkcije koja je sadrži.
Ključne tačke:
- Vreme izvršavanja: Odložena funkcija se izvršava na kraju roditeljske funkcije, čak i ako dođe do panike ili izuzetka.
- Stek: Odloženi pozivi formiraju stek. Poslednji odloženi poziv će biti izvršen prvi (LIFO).
- Hvatanje promenljivih: Argumenti odložene funkcije se procenjuju u trenutku deklaracije
defer, a ne u trenutku izvršenja.
Primeri tipične upotrebe:
- Zatvaranje fajlova, mrežnih konekcija, mutexa.
- Obnavljanje stanja (npr. nakon promene globalnih promenljivih ili zastavica).
- Merenje vremena izvršenja.
// Primer korišćenja defer za zatvaranje fajla
func readFile(filename string) error {
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close() // Fajl će biti zatvoren pre izlaska iz funkcije
// Čitanje iz fajla...
return nil
}
// Primer steka odlaganja poziva
func process() {
defer fmt.Println("Prvi na steku")
defer fmt.Println("Drugi na steku")
defer fmt.Println("Treći na steku") // Biće izvršeno poslednje
fmt.Println("Obrada...")
}
Odloženi pozivi sa argumentima:
// Primer hvatanja vrednosti promenljive u trenutku deklaracije defer
func demonstrateDeferArgEval() {
i := 0
defer fmt.Println("Vrednost i u defer:", i) // i će biti 0
i++
fmt.Println("Vrednost i nakon inkrementa:", i) // i će biti 1
}