如何通过遍历列表创建多个CRON函数

时间:2019-07-18 13:04:24

标签: go cron goroutine


import (
    "fmt"

    "gopkg.in/robfig/cron.v3"
)

func test(x int) {
    fmt.Println("acessesing device", x)
}
func main() {
    c := cron.New()
    x := make(chan bool)
    devices := [10]int{1,2,3,4,5,6,7,8,9,10}
    for _, va := range devices {
        c.AddFunc("@every 30s", func() { test(va) })
    }

    c.Start()
    <-x
}

以上程序获得的输出:

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

访问网关13

我喜欢用不同的输入运行相同的功能

每30秒预期输出

访问网关1

访问网关2

访问网关3

访问网关4

访问网关5

访问网关6

访问网关7

访问网关8

访问网关9

访问网关10

1 个答案:

答案 0 :(得分:1)

您的代码中的问题等同于此处描述的问题:

https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables

要修复它:

for _, va := range devices {
    va := va // create a new "va" variable on each iteration
    c.AddFunc("@every 30s", func() { test(va) })
}