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

Pourquoi les fonctions anonymes dans les boucles « for » de Go capturent-elles la valeur finale de la variable de boucle ?

Linda Hamilton
Libérer: 2024-11-19 03:49:03
original
787 Les gens l'ont consulté

Why Do Anonymous Functions in Go's `for` Loops Capture the Final Value of the Loop Variable?

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

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!

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