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
1 回答
慕姐4208626
TA贡献1852条经验 获得超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 关注
- 96 浏览
添加回答
举报
0/150
提交
取消