Middle
Cos'è una closure in Go e come funziona?
sobes.tech AI
Risposta dell'AI
La chiusura in Go è una funzione che "ricorda" il valore delle variabili del suo ambiente lessicale, anche dopo che tale ambiente ha cessato di esistere.
Il principio di funzionamento è il seguente:
- Quando viene creata una chiusura (ad esempio, all'interno di un'altra funzione), essa cattura riferimenti alle variabili dell'ambito in cui è stata dichiarata.
- Queste variabili catturate rimangono vive finché la chiusura esiste, anche se la funzione in cui sono state dichiarate è già terminata.
- Ad ogni chiamata della chiusura, essa può accedere e modificare queste variabili catturate.
Esempio:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Variabile dell'ambiente esterno
return func() int { // Questa è una chiusura
count++ // Accede e modifica `count`
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Stampa 1
fmt.Println(counter1()) // Stampa 2
counter2 := makeCounter() // Crea una nuova chiusura con il suo `count`
fmt.Println(counter2()) // Stampa 1
}
In questo esempio, la funzione makeCounter restituisce una funzione (chiusura). Questa chiusura "cattura" la variabile count. Ogni volta che si chiama la funzione restituita, il valore di count viene incrementato, appartenente a questa specifica istanza di chiusura.