最近用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变量都是最后最大的哪个数值,没有达到循环创建不同定时器的目的,困扰了二天了,还是没有办法解决。求高手指点。
你没注意到我用的包,可以有第三个参数,就是定义任务的名称,这样就可以删除任务。c.Start() 我是写在for 循环前面了,我的理解是开始定义并执行任务。jarlyyn大神 说的 spec[i].Start() for中加这句,我去试一下。
#8
更多评论
你是在讨论闭包问题吧……
你for循环内加个var currentspec=spec[i][1],然后调用currentspec看看。
其实这都不是最好的方式……
#1