Heim > Artikel > Backend-Entwicklung > Warum druckt mein Go Cron Scheduler die Beschreibung des letzten Jobs für alle Jobs?
Variable kann keiner anonymen Funktion in for-Schleife zugewiesen werden: Eine Schließungsfalle
Beim Lernen von Go-Lang sind Sie beim Entwickeln einer auf ein Problem gestoßen Aufgabenplaner mit der Cron-Bibliothek. Sie haben festgestellt, dass der Planer für alle geplanten Jobs die Beschreibung des letzten Jobs druckte. Dieses Verhalten wird durch die Verwendung anonymer Funktionen innerhalb der for-Schleife verursacht, was zu Fallstricken beim Schließen führt.
In Go nimmt die Variable val in einer for-Schleife den Wert jedes Slice-Elements an. Wenn Sie den Abschluss innerhalb der Schleife verwenden, sind alle Abschlüsse an dieselbe Variable gebunden. Da die Goroutinen wahrscheinlich erst nach der Schleife ausgeführt werden, wird das letzte Element am Ende mehrmals gedruckt.
Um dieses Problem zu beheben, haben Sie versucht, den Job als Parameter an die anonyme Funktion zu übergeben. Allerdings akzeptiert die Cron-Bibliothek keine Funktionen mit Parametern, da sie einen Funktionstyp func() erwartet.
Die empfohlene Lösung besteht darin, für jede Iteration der Schleife eine neue Variable zu erstellen. Indem Sie den aktuellen Job einer neuen Variablen (realJob) zuweisen, erstellen Sie einen neuen Bereich für den Abschluss und stellen sicher, dass jeder Abschluss über eine eigene Instanz der Jobvariablen verfügt.
Hier ist der korrigierte Code:
for _, job := range config.Jobs { realJob := job c.AddFunc("@every "+realJob.Interval, func() { DistributeJob(realJob) }) log.Println("Job " + realJob.Name + " has been scheduled!") }
Indem Sie innerhalb jeder Schleifeniteration eine neue realJob-Variable erstellen, vermeiden Sie die Fallstricke beim Schließen und stellen sicher, dass jeder geplante Job die richtige Beschreibung druckt.
Das obige ist der detaillierte Inhalt vonWarum druckt mein Go Cron Scheduler die Beschreibung des letzten Jobs für alle Jobs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!