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
}
以上程序得到的输出:
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
接入网关13
我喜欢用不同的输入运行相同的函数
每30秒的预期输出
访问网关1
接入网关2
接入网关3
接入网关4
接入网关5
接入网关6
接入网关7
接入网关8
访问网关9
接入网关10
发布于 2019-07-18 21:32:28
您的代码中的问题等同于下面描述的问题:
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) })
}
https://stackoverflow.com/questions/57095167
复制相似问题