最近用goalng的"github.com/jakecoffman/cron"包来写一个任务管理功能
创建多个定时器的代码如下:
for i = 0; i < len(spec); i++ {
c.AddFunc(spec[i][1], func() {
fmt.Println("协程开始采集ID为:")
go spider(spec[i][0])
}, spec[i][0])
}
提示是 i 变量越界。后来发现golang编译的时候,可能把c.Addfunc中的内容放在最后去编译,导致,i变量都是最后最大的哪个数值,没有达到循环创建不同定时器的目的,困扰了二天了,还是没有办法解决。求高手指点。
嗯,那问题就是go的闭包与并发问题了,你可以看下这个博客,解释的很详细https://www.bangbangde.com/post/golang_goroutines_and_closures.html
#9
更多评论
你是在讨论闭包问题吧……
你for循环内加个var currentspec=spec[i][1],然后调用currentspec看看。
其实这都不是最好的方式……
#1