import ( "fmt" "gopkg.in/robfig/cron.v3")func test(x int) { fmt.Println("acessesing device", x)}func main() { c := cron.New() x := make(chan bool) devices := [10]int{1,2,3,4,5,6,7,8,9,10} for _, va := range devices { c.AddFunc("@every 30s", func() { test(va) }) } c.Start() <-x}上述程序得到的輸出:接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13接入網(wǎng)關13我喜歡用不同的輸入運行相同的函數(shù)每 30 秒的預期輸出接入網(wǎng)關1接入網(wǎng)關2接入網(wǎng)關3接入網(wǎng)關4接入網(wǎng)關5接入網(wǎng)關6接入網(wǎng)關7接入網(wǎng)關8接入網(wǎng)關9接入網(wǎng)關10
1 回答

慕姐4208626
TA貢獻1852條經(jīng)驗 獲得超7個贊
您的代碼中的問題相當于此處描述的問題:
https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
要解決這個問題:
for _, va := range devices {
va := va // create a new "va" variable on each iteration
c.AddFunc("@every 30s", func() { test(va) })
}
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消