Warum druckt mein Go Cron Scheduler die Beschreibung des letzten Jobs für alle Jobs?

DDD
Freigeben: 2024-11-17 14:10:02
Original
139 Leute haben es durchsucht

Why Does My Go Cron Scheduler Print the Last Job's Description for All 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!")
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage