for 循環中的匿名函數:意外行為
在你的Go 程式中,你發現你的排程程式沒有印出預期的輸出對於每個預定的作業。該問題歸因於 for 迴圈中使用了匿名函數。
在 for 迴圈中,每次迴圈執行時,匿名函數都會擷取迴圈變數 job。但是,由於只有一個匿名函數,因此它使用循環的最後一次迭代中的作業變數。這會導致所有作業列印上一個作業的描述。
解決方案:為每次迭代建立一個新變數
要解決此問題,請為每個迭代建立一個新變數循環的每次迭代。這將確保每個匿名函數捕獲其自己的循環變數的唯一值:
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!") }
透過此修改,每個匿名函數將擁有自己的作業變數副本,從而正確列印作業的描述它代表。
以上是為什麼 Go 的 for 迴圈中的匿名函數會捕捉循環變數的最終值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!