如何通过循环列表创建多个 CRON 函数

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


Smart猫小萌
浏览 104回答 1
1回答

慕姐4208626

您的代码中的问题相当于此处描述的问题:https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables要解决这个问题:for _, va := range devices {&nbsp; &nbsp; va := va // create a new "va" variable on each iteration&nbsp; &nbsp; c.AddFunc("@every 30s", func() { test(va) })}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go