Junior — Middle
Aký je výsledok priradenia hodnoty premennej pomocou konštrukcie defer, keď jej hodnota je nastavená vo vnútri funkcie?
sobes.tech AI
Odpoveď od AI
V jazyku Go, kľúčové slovo defer odkladá vykonanie funkcie do ukončenia okružujúcej funkcie. Argumenty funkcie odovzanej defer sa vyhodnocujú okamžite v momente deklarácie defer, nie počas jej vykonávania.
Ak sa premenná používa vo vnútri funkcie volanej cez defer, jej hodnota bude tá, ktorá bola v momente deklarácie defer, ak bola odovzdaná ako argument. Ak sa premenná používa priamo (napríklad cez uzáver), bude použitá jej aktuálna hodnota v momente vykonania odložené funkcie.
Príklad:
func príklad() {
x := 1
defer fmt.Println(x) // x bude 1, pretože argument je vyhodnotený okamžite
x = 2
}
// Pri volaní príklad(), sa vypíše: 1
Ak sa použije uzáver:
func príklad() {
x := 1
defer func() { fmt.Println(x) }() // funkcia bude zavolaná pri ukončení, x bude 2
x = 2
}
// Pri volaní príklad(), sa vypíše: 2
Takže výsledok priradenia premennej v defer závisí od toho, ako je premenná použitá — ako argument funkcie alebo cez uzáver.