Care este rezultatul atribuirii unei valori unei variabile folosind construcția defer, atunci când valoarea acesteia este stabilită în interiorul unei funcții?
sobes.tech AI
Răspuns de la AI
În Go, cuvântul cheie defer amână executarea unei funcții până la ieșirea din funcția înconjurătoare. Argumentele funcției transmise la defer sunt evaluate imediat în momentul declarării lui defer, nu în timpul execuției.
Dacă o variabilă este utilizată în interiorul funcției apelate prin defer, valoarea variabilei va fi cea de la momentul declarării lui defer, dacă este transmisă ca argument. Dacă variabila este utilizată direct (de exemplu, printr-o închidere), va fi folosită valoarea sa curentă în momentul execuției funcției întârziate.
Exemplu:
func exemplu() {
x := 1
defer fmt.Println(x) // x va fi 1, deoarece argumentul este evaluat imediat
x = 2
}
// La apelarea exemplu(), se va afișa: 1
Dacă se folosește o închidere:
func exemplu() {
x := 1
defer func() { fmt.Println(x) }() // funcția va fi apelată la ieșire, x va fi 2
x = 2
}
// La apelarea exemplu(), se va afișa: 2
Astfel, rezultatul atribuirii variabilei în defer depinde de modul în care variabila este utilizată — ca argument al funcției sau prin închidere.