最近用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变量都是最后最大的哪个数值,没有达到循环创建不同定时器的目的,困扰了二天了,还是没有办法解决。求高手指点。
cron中AddFunc()方法相当于并发执行,主进程中i肯定到临界点了,所以再用spec[i]这种形式肯定显示超出切片范围。
而且你AddFunc()方法参数还写错了,不能有第3个参数。
解决方法就是给AddFunc()方法传入确定的值。x1 := spec[i][0];x2 := spec[i][1]
#6
更多评论
你是在讨论闭包问题吧……
你for循环内加个var currentspec=spec[i][1],然后调用currentspec看看。
其实这都不是最好的方式……
#1