Golang Robfig cron AddFunc 不动态 运行 作业
Golang Robfig cron AddFunc does not dynamically run the jobs
我正在使用 robfig/cron 模块开发 cron 作业服务。我面临的问题是它无法动态 运行 cron 作业功能。例如参考下面的代码
mapp := map[int]string{1: "one", 2: "two", 3: "three"}
cr := cron.New()
for integ, spell := range mapp {
cr.AddFunc("@every 2s", func() {
fmt.Println("Running Cron Spell:", spell, "Integer:",integ)})
}
cr.Start()
每2秒输出如下
Running Cron Spell: three Integer: 3
Running Cron Spell: three Integer: 3
Running Cron Spell: three Integer: 3
所有 3 个 cron 作业的输出都是相同的。我原以为它会给出这样的输出。
Running Cron Spell: one Integer: 1
Running Cron Spell: two Integer: 2
Running Cron Spell: three Integer: 3
不知道是bug还是我做错了。我的目标是让 cron 作业 运行 动态地基于配置值。有什么解决方法可以使它成为我想要的输出吗?
在循环中重新分配范围变量:
for integ, spell := range mapp {
integ, spell := integ, spell
cr.AddFunc("@every 2s", func() {
fmt.Println("Running Cron Spell:", spell, "Integer:",integ)})
}
范围变量与每次迭代中重复使用的变量相同。如果关闭它,闭包(函数文字)将看到迭代中的最后一个值。
我正在使用 robfig/cron 模块开发 cron 作业服务。我面临的问题是它无法动态 运行 cron 作业功能。例如参考下面的代码
mapp := map[int]string{1: "one", 2: "two", 3: "three"}
cr := cron.New()
for integ, spell := range mapp {
cr.AddFunc("@every 2s", func() {
fmt.Println("Running Cron Spell:", spell, "Integer:",integ)})
}
cr.Start()
每2秒输出如下
Running Cron Spell: three Integer: 3
Running Cron Spell: three Integer: 3
Running Cron Spell: three Integer: 3
所有 3 个 cron 作业的输出都是相同的。我原以为它会给出这样的输出。
Running Cron Spell: one Integer: 1
Running Cron Spell: two Integer: 2
Running Cron Spell: three Integer: 3
不知道是bug还是我做错了。我的目标是让 cron 作业 运行 动态地基于配置值。有什么解决方法可以使它成为我想要的输出吗?
在循环中重新分配范围变量:
for integ, spell := range mapp {
integ, spell := integ, spell
cr.AddFunc("@every 2s", func() {
fmt.Println("Running Cron Spell:", spell, "Integer:",integ)})
}
范围变量与每次迭代中重复使用的变量相同。如果关闭它,闭包(函数文字)将看到迭代中的最后一个值。