Middle
Qu'est-ce qu'une fermeture (closure) en Go et comment fonctionne-t-elle?
sobes.tech IA
Réponse de l'IA
La fermeture en Go est une fonction qui "se souvient" de la valeur des variables de son environnement lexical, même après que cet environnement a cessé d'exister.
Le principe de fonctionnement est le suivant :
- Lorsqu'une fermeture est créée (par exemple, à l'intérieur d'une autre fonction), elle capture des références aux variables de la portée où elle a été déclarée.
- Ces variables capturées restent vivantes tant que la fermeture existe, même si la fonction dans laquelle elles ont été déclarées a terminé.
- À chaque appel de la fermeture, elle peut accéder et modifier ces variables capturées.
Exemple :
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Variable de l'environnement externe
return func() int { // C'est une fermeture
count++ // Elle accède et modifie `count`
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Affiche 1
fmt.Println(counter1()) // Affiche 2
counter2 := makeCounter() // Crée une nouvelle fermeture avec son propre `count`
fmt.Println(counter2()) // Affiche 1
}
Dans cet exemple, la fonction makeCounter retourne une fonction (fermeture). Cette fermeture "capture" la variable count. Chaque appel à la fonction retournée augmente la valeur de count, qui appartient à cette instance spécifique de la fermeture.