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

  1. 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.
  2. 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é.
  3. À 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.