Maison >développement back-end >Golang >Pourquoi les boucles For de Golang produisent-elles des sorties différentes lors de l'utilisation de fermetures ?
Dans ce code, nous créons deux boucles for (loop1 et loop2) qui parcourent une tranche de chaînes (cmds). Cependant, le résultat résultant de ces boucles diffère.
Dans la boucle 1, après avoir itéré sur cmds, une carte (actions) est créée où chaque commande est mappée à une fonction qui imprime la commande. Lorsque ces fonctions sont exécutées, elles impriment toutes "update", qui est le dernier élément de cmds.
Dans la boucle 2, une approche similaire est adoptée, mais au lieu de stocker références directes aux commandes dans la carte des actions, une copie de la commande est réalisée à l'aide de son index. Cela garantit que chaque fonction possède sa propre copie de la commande, empêchant ainsi la sortie inattendue de "mise à jour" de la boucle1.
Le comportement particulier de la boucle1 se produit en raison de la façon dont les fermetures (fonctions stockées dans la carte des actions) référence les variables de boucle.
En faisant une copie de la variable de boucle pour chaque fonction (comme dans loop2), chaque fonction possède sa propre variable isolée qui n'est pas affectée par la boucle suivante itérations.
Cet exemple met en évidence l'importance de la portée des variables dans Golang et la distinction entre les variables de boucle et les variables détachées créées par copie. Lorsque vous travaillez avec des fermetures faisant référence à des variables de boucle, il est crucial de s'assurer que des copies sont effectuées pour éviter tout comportement inattendu dû à la réutilisation des variables.
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!