登录
首页 >  Golang >  Go问答

如何使用单个函数创建具有不同参数的 Cron 任务?

来源:stackoverflow

时间:2024-02-17 19:18:25 311浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如何使用单个函数创建具有不同参数的 Cron 任务?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

c := cron.New()
task := inittask()
for _, ta := range task {
    c.AddFunc("*/10 * * * * *", func() {getdata(ta, DBS, DBT)})
}
c.Start()
select {}

不起作用,只有第一个或最后一个参数起作用。


正确答案


_, v := range 循环分配一个 v 变量,然后在每次迭代中重复使用它。

当您在这样的循环中使用闭包时,您将捕获重复使用的变量,这会导致每个闭包引用相同的内存地址,因此,当循环退出时,每个闭包都会有最后一次迭代的数据。

https://golang.org/doc/faq#closures_and_goroutines

c := cron.new()
task := inittask()
for _, ta := range task {
    ta := ta // copy ta
    c.addfunc("*/10 * * * * *", func() {getdata(ta, dbs, dbt)})
}
c.start()
select {}

或者,您也可以通过以下方式解决该问题:

c := cron.New()
task := inittask()
for i := range task {
    c.AddFunc("*/10 * * * * *", func() {getdata(task[i], DBS, DBT)})
}
c.Start()
select {}

到这里,我们也就讲完了《如何使用单个函数创建具有不同参数的 Cron 任务?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>