最近用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变量都是最后最大的哪个数值,没有达到循环创建不同定时器的目的,困扰了二天了,还是没有办法解决。求高手指点。
func (s Spec) Start(){
c.AddFunc(s,
func(){
fmt.Println("协程开始采集ID为:")
go spider(s[0])
},
s)
}
#4
更多评论
你是在讨论闭包问题吧……
你for循环内加个var currentspec=spec[i][1],然后调用currentspec看看。
其实这都不是最好的方式……
#1