Middle
Ce este o închidere (closure) în Go și cum funcționează?
sobes.tech AI
Răspuns de la AI
Închiderile în Go sunt funcții care "își amintesc" valoarea variabilelor din mediul lor lexical, chiar și după ce acest mediu nu mai există.
Principiul de funcționare este următorul:
- Când se creează o închidere (de exemplu, în interiorul unei alte funcții), aceasta capturează referințe la variabilele din domeniul în care a fost declarată.
- Aceste variabile capturate rămân vii atât timp cât închiderea există, chiar dacă funcția în care au fost declarate s-a încheiat deja.
- La fiecare apel al închiderii, aceasta poate accesa și modifica aceste variabile capturate.
Exemplu:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Variabilă din mediul extern
return func() int { // Aceasta este o închidere
count++ // Accesează și modifică `count`
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Va afișa 1
fmt.Println(counter1()) // Va afișa 2
counter2 := makeCounter() // Creează o nouă închidere cu propriul `count`
fmt.Println(counter2()) // Va afișa 1
}
În acest exemplu, funcția makeCounter returnează o funcție (închidere). Această închidere "capturează" variabila count. Fiecare apel al funcției returnate crește valoarea lui count, care aparține acestei instanțe specifice de închidere.