Sobes.tech
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:

  1. Quando viene creata una chiusura (ad esempio, all'interno di un'altra funzione), essa cattura riferimenti alle variabili dell'ambito in cui è stata dichiarata.
  2. Queste variabili catturate rimangono vive finché la chiusura esiste, anche se la funzione in cui sono state dichiarate è già terminata.
  3. 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.