猿问

无法在 for 循环中将变量分配给匿名函数

我正在通过开发任务计划来学习 go-lang。我使用的cron 库接受一个 cron 表达式和一个 func 作为参数来添加调度程序。


c.AddFunc("0 30 * * * *", func() { fmt.Println("每半小时") })

我正在根据 yaml 文件开发计划作业。所以我迭代作业以添加这样的调度程序:


类型作业结构{

    名称字符串

    间隔字符串


}


func DistributeJob(作业作业){

    log.Println("running", job, job.Interval)

}


功能主(){

    //从yaml加载配置

    c := cron.New()


    对于 _, 工作 := 范围 config.Jobs {

        c.AddFunc("@every"+job.Interval, func() {

            分发作业(作业)

        })

        log.Println("Job " + job.Name + " 已安排!")

    }


    c.开始()

    选择 {}

}

所有作业都按它们的时间间隔安排,但事实证明它们正在打印最后一个作业的描述。例如,如果我安排两个作业,第一个间隔为 3 分钟,后一个间隔为 1 分钟。控制台打印:


12:01:运行后1分钟

12:02:跑后1分钟

12:03:跑后1分钟

12:03:跑后1分钟//这应该是第一个工作

我认为问题出在


    功能(){

        分发作业(作业)

    })

似乎只需要最后一份工作,但我不知道为什么。我尝试使用


    c.AddFunc("@every"+job.Interval, func(job JobType) {

        分发作业(作业)

    }(工作))

但由于不能用作值而失败


月关宝盒
浏览 155回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答