首頁  >  文章  >  後端開發  >  如何解決在 For 迴圈中排程作業時的關閉問題?

如何解決在 For 迴圈中排程作業時的關閉問題?

Patricia Arquette
Patricia Arquette原創
2024-11-24 19:25:13697瀏覽

How to Fix Closure Issues When Scheduling Jobs in a For Loop?

解決For 循環中的閉包問題:無法將變數分配給匿名函數

在創建任務計劃的上下文中,您遇到了問題其中計劃作業打印最後一個迭代作業的描述而不是它們自己的描述。這個問題源自於在 for 迴圈中使用匿名函數。

循環中的所有閉包共享相同的變數(在您的例子中是 job 變數)這一事實引起了挑戰。當您進行迴圈時,該變數會被下一個作業的資料覆蓋。

為了解決此問題,您嘗試將作業變數作為參數傳遞給匿名函數,但收到錯誤,因為帶參數的函數與不帶參數的函數具有不同的類型。

建議的解決方案是為循環的每次迭代建立一個新變數(在您的例子中為 realJob),以維護每個作業的唯一引用。透過這樣做,您可以避免關閉問題,並確保每個計劃作業都會列印自己的正確描述。

這是修改後的程式碼:

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!")
}

以上是如何解決在 For 迴圈中排程作業時的關閉問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn