Junior — Middle
Koji je rezultat dodeljivanja vrednosti promenljivoj koristeći konstrukciju defer, kada se njena vrednost postavlja unutar funkcije?
sobes.tech АИ
Одговор од АИ
U jeziku Go, ključna reč defer odlaže izvršenje funkcije do izlaska iz okružujuće funkcije. Argumenti funkcije prosleđene defer-u se odmah evaluiraju u trenutku deklaracije defer, a ne tokom izvršenja.
Ako se promenljiva koristi unutar funkcije pozvane putem defer, vrednost te promenljive će biti ona u trenutku deklaracije defer, ako je prosleđena kao argument. Ako se promenljiva koristi direktno (npr. putem zatvaranja), koristiće se njena trenutna vrednost u trenutku izvršenja odložene funkcije.
Primer:
func primer() {
x := 1
defer fmt.Println(x) // x će biti 1, jer je argument odmah evaluiran
x = 2
}
// Pri pozivu primer(), biće ispisano: 1
Ako se koristi zatvaranje:
func primer() {
x := 1
defer func() { fmt.Println(x) }() // funkcija će biti pozvana pri izlasku, x će biti 2
x = 2
}
// Pri pozivu primer(), biće ispisano: 2
Tako, rezultat dodele promenljive u defer zavisi od toga kako se promenljiva koristi — kao argument funkcije ili putem zatvaranja.