Junior — Middle
Mi az eredménye annak, ha egy változónak értéket adunk a defer szerkezet használatával, amikor az értékét egy függvényen belül állítjuk be?
sobes.tech MI
Válasz az MI-től
Go nyelvben a defer kulcsszó késlelteti egy függvény végrehajtását a körülötte lévő függvény kilépéséig. A defer-hez átadott függvény argumentumai azonnal értékelődnek ki a defer deklarálásakor, nem a végrehajtáskor.
Ha egy változót a defer-rel hívott függvényen belül használunk, akkor a változó értéke az lesz, ami a defer deklarálásának pillanatában volt, ha argumentumként adtuk át. Ha a változót közvetlenül használjuk (például lezárás révén), akkor a végrehajtás pillanatában aktuális értékét fogja használni.
Példa:
func példa() {
x := 1
defer fmt.Println(x) // x értéke 1 lesz, mert az argumentum azonnal kiértékelődik
x = 2
}
// A példa() hívásakor kiíródik: 1
Ha lezárást használunk:
func példa() {
x := 1
defer func() { fmt.Println(x) }() // a függvény a kilépéskor hívódik, x értéke 2 lesz
x = 2
}
// A példa() hívásakor kiíródik: 2
Így a defer-ben lévő változó értékének eredménye attól függ, hogyan használjuk — függvény argumentumaként vagy lezáráson keresztül.