Préserver les variables locales en Go : une alternative au "statique" du C
En Go, contrairement au C, il n'y a pas d'équivalent direct au Mot-clé 'static' pour les variables locales. Cependant, il est toujours possible de créer des variables locales qui conservent leurs valeurs entre les appels de fonction en exploitant le concept de fermetures.
La fermeture à la rescousse
Une fermeture en Go est une fonction qui capture et partage l'environnement de la fonction dans laquelle elle a été créée. Cela inclut l'accès aux variables définies en dehors de la portée de la fermeture. En tirant parti des fermetures, nous pouvons simuler un comportement similaire à celui d'une variable locale statique en C.
Exemple en Go
Considérez le code suivant :
func main() { x := 0 func() { defer fmt.Println("x:", x) x++ }() for i := 0; i < 10; i++ { x++ } }
Ici, nous définissons une fonction (anonyme) qui se ferme sur la variable 'x' dans la fonction 'main'. Ceci capture la valeur actuelle de « x » lorsque la fonction est exécutée.
Sortie :
x: 1 x: 2 x: 3 .... x: 10
Comme vous pouvez le voir, la valeur de « x » s'incrémente au sein de la fonction fermée tout en restant indépendant du « x » qui est incrémenté dans la fonction « principale ». Cela se comporte effectivement comme une variable locale statique, préservant sa valeur entre les appels de fonction.
Remarque :
Cette approche fonctionne car la fonction capture la valeur de « x » par -référence, plutôt que par valeur. Cela garantit que toutes les modifications apportées à « x » dans la fonction sont reflétées dans la portée englobante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!