Maison > Article > développement back-end > Pourquoi les fonctions anonymes dans les boucles « for » de Go capturent-elles la valeur finale de la variable de boucle ?
Fonctions anonymes dans les boucles for : comportement inattendu
Dans votre programme Go, vous avez découvert que votre planificateur n'imprime pas le résultat attendu pour chaque travail planifié. Le problème est attribué à l'utilisation de fonctions anonymes dans la boucle for.
Dans une boucle for, la fonction anonyme capture le travail de la variable de boucle à chaque fois que la boucle s'exécute. Cependant, comme il n’existe qu’une seule fonction anonyme, elle utilise la variable job de la dernière itération de la boucle. Cela entraîne l'impression par tous les travaux de la description du dernier travail.
Solution : créer une nouvelle variable pour chaque itération
Pour résoudre ce problème, créez une nouvelle variable pour chaque itération de la boucle. Cela garantira que chaque fonction anonyme capture sa propre valeur unique de la variable de boucle :
for _, job := range config.Jobs { realJob := job // a new variable each time through the loop c.AddFunc("@every "+realJob.Interval, func() { DistributeJob(realJob) }) log.Println("Job " + realJob.Name + " has been scheduled!") }
Avec cette modification, chaque fonction anonyme aura sa propre copie de la variable de travail, imprimant correctement la description du travail ça représente.
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!