Heim > Artikel > Backend-Entwicklung > Warum erfassen anonyme Funktionen in den „for'-Schleifen von Go den Endwert der Schleifenvariablen?
Anonyme Funktionen in for-Schleifen: Unerwartetes Verhalten
In Ihrem Go-Programm haben Sie festgestellt, dass Ihr Scheduler nicht die erwartete Ausgabe druckt für jeden geplanten Job. Das Problem wird auf die Verwendung anonymer Funktionen in der for-Schleife zurückgeführt.
In einer for-Schleife erfasst die anonyme Funktion den Schleifenvariablenjob jedes Mal, wenn die Schleife ausgeführt wird. Da es jedoch nur eine anonyme Funktion gibt, verwendet sie die Jobvariable aus dem letzten Durchlauf der Schleife. Dies führt dazu, dass alle Jobs die Beschreibung des letzten Jobs drucken.
Lösung: Erstellen Sie eine neue Variable für jede Iteration
Um dieses Problem zu beheben, erstellen Sie eine neue Variable für jede Iteration der Schleife. Dadurch wird sichergestellt, dass jede anonyme Funktion ihren eigenen eindeutigen Wert der Schleifenvariablen erfasst:
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!") }
Mit dieser Änderung verfügt jede anonyme Funktion über eine eigene Kopie der Jobvariablen, wodurch die Beschreibung des Jobs korrekt gedruckt wird es repräsentiert.
Das obige ist der detaillierte Inhalt vonWarum erfassen anonyme Funktionen in den „for'-Schleifen von Go den Endwert der Schleifenvariablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!