Maison > développement back-end > Golang > le corps du texte

Comment éviter les problèmes d'affectation de fermeture lors de la planification de tâches dans une boucle For ?

Linda Hamilton
Libérer: 2024-11-17 18:09:01
original
541 Les gens l'ont consulté

How to Avoid Closure Assignment Problems When Scheduling Jobs in a For Loop?

Résolution des problèmes d'affectation de fermeture dans "Impossible d'attribuer une variable à une fonction anonyme dans la boucle for"

Dans le contexte de la création d'un planificateur de tâches, le l'incapacité d'attribuer des variables à des fonctions anonymes dans une boucle for peut provoquer un comportement involontaire. Ce problème se produit lorsque les fonctions anonymes capturent des variables définies en dehors de leur portée, conduisant à des résultats inattendus ou incorrects.

Dans le scénario spécifique mentionné, un planificateur est créé sur la base d'un fichier de configuration contenant des noms de tâches et des intervalles. Chaque tâche est planifiée à l'aide de la bibliothèque "cron", ce qui nécessite de spécifier une expression cron et une fonction à exécuter. Cependant, le code parcourt par erreur les tâches et attribue la même fonction anonyme à chaque planificateur, ce qui entraîne l'impression de descriptions de travail incorrectes.

Pour résoudre ce problème, nous devons nous assurer que chaque fonction anonyme capture sa variable prévue. Ceci peut être réalisé en créant une nouvelle variable pour chaque itération de la boucle, comme démontré ci-dessous :

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!")
}
Copier après la connexion

En utilisant une nouvelle variable pour chaque itération, nous garantissons que chaque fonction anonyme capture le bon objet de travail, éliminant le problème où ils faisaient tous référence à la même variable et provoquaient des résultats inattendus. Cette approche fournit des descriptions de poste précises et garantit le comportement prévu du planificateur.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal