Maison > Article > développement back-end > Pourquoi les fonctions anonymes dans les fermetures impriment-elles uniquement la description du dernier travail dans les boucles For ?
Fonctions anonymes dans les boucles for avec fermetures
Lors de la planification de tâches à l'aide de la bibliothèque cron, une erreur courante se produit lors de l'itération dans une liste de tâches et tenter d'utiliser des fonctions anonymes dans la boucle. Cette erreur est particulièrement évidente lorsque chaque travail doit imprimer sa propre description unique, mais imprime à la place la description du dernier travail de la liste.
Le problème sous-jacent réside dans la façon dont les fonctions anonymes gèrent les variables. Lors d’une itération dans une liste, la variable de boucle prendra séquentiellement la valeur de chaque élément de la liste. Cependant, les fonctions anonymes au sein de la boucle sont liées à la variable de boucle d'origine, qui est partagée entre toutes les itérations. Cela signifie que toutes les fonctions anonymes finissent par utiliser la même valeur de la variable de boucle, ce qui entraîne l'impression plusieurs fois de la description du dernier travail.
Pour résoudre ce problème, il est nécessaire de créer une nouvelle variable à chaque itération. de la boucle, garantissant ainsi que chaque fonction anonyme possède sa propre instance de la variable. Cette technique évite les complications causées par les fermetures.
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 cet ajustement, chaque travail aura sa propre description, imprimée correctement lorsque son heure prévue arrive.
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!