Golang fmt.打印计时器

Golang fmt.打印计时器,go,time,duration,Go,Time,Duration,我怎样才能每5分钟使用一次fmt.Println h := fmt.Sprintf("%x", word) fmt.Println(h) 我需要这样的东西: 如果时间:=5分钟,则fmt.Println(h) 仅显示(n)每5分钟一次,而不是每行 编辑:显然我没有问正确的问题。 存在一个每秒生成随机数字的循环 for i := n1; i.Cmp(n2) < 0; i.Add(i, one) { i:=n1的;i、 Cmp(n2)

我怎样才能每5分钟使用一次fmt.Println

h := fmt.Sprintf("%x", word)
fmt.Println(h)
我需要这样的东西: 如果时间:=5分钟,则fmt.Println(h)

仅显示(n)每5分钟一次,而不是每行

编辑:显然我没有问正确的问题。

存在一个每秒生成随机数字的循环

for i := n1; i.Cmp(n2) < 0; i.Add(i, one) {
i:=n1的
;i、 Cmp(n2)<0;i、 加(一、一){
我想要的是:不是显示每个生成的变量(I),而是 每5分钟就有一次


如果您想在5分钟后只做一次,可以使用goroutine和
WaitGroup

var wg sync.WaitGroup
wg.Add(1)

go func() {
   defer wg.Done()
   time.Sleep(...)
   fmt.Println("hello")
}()
wg.Wait()
前往游乐场示例:


如果您想每隔5分钟做一件事,请执行以下操作:

func doEvery(d time.Duration, f func(time.Time)) {
    for x := range time.Tick(d) {
        f(x)
    }
}

func helloworld(t time.Time) {
    fmt.Printf("%v: Hello, World!\n", t)
}

func main() {
    doEvery(3*time.Second, helloworld)
}

如果在5分钟后做某事,只需使用
时间。AfterFunc

time.AfterFunc(time.Minute * 5, func() {
    // Do something after 5min
    h := fmt.Sprintf("%x", word)
    fmt.Println(h)
})
否则,如果每5分钟做一次,则使用for loop(并在需要时执行例行程序):

另一种方法是使用
time。NewTicker
可以获得一个时间计数器:

ticker:=time.NewTicker(time.Minute * 5)
for{
    select{
    case <-ticker.C:
        // Do something every 5min
        h := fmt.Sprintf("%x", word)
        fmt.Println(h)
    }
}
ticker:=time.NewTicker(time.Minute*5)
为了{
挑选{

case重复执行任务的方法有很多种。选择哪一种取决于您。下面列出了一些方法:

  • 最简单的方法(可能是):

  • 返回一个新的Ticker,其中包含一个频道,该频道将以duration参数指定的时间段发送时间

    ticker := time.NewTicker(5 * time.Minute)
    defer ticker.Stop()
    done := make(chan bool)
    go func() {
        time.Sleep(30 * time.Minute)
        done <- true
    }()
    for {
        select {
        case <-done:
            fmt.Println("Done!")
            return
        case <-ticker.C:
            fmt.Println("hello")
        }
    }
    

  • 这也很有帮助

    c := cron.New()
    c.AddFunc("@every 5m", func() { fmt.Println("hello") })
    c.Start()
    select {}
    
更新

  • 我在github中找到了另一个链接:

我找到了另一个链接并更新了答案。谢谢!但我似乎没有问正确的问题。请检查“编辑部分”,并告诉我这是否有用:)@Mad,但您应该先指定它。是的,很抱歉:(
ticker := time.NewTicker(5 * time.Minute)
defer ticker.Stop()
done := make(chan bool)
go func() {
    time.Sleep(30 * time.Minute)
    done <- true
}()
for {
    select {
    case <-done:
        fmt.Println("Done!")
        return
    case <-ticker.C:
        fmt.Println("hello")
    }
}
go func() {
    for range time.Tick(5 * time.Second){
        fmt.Println("hello")
    }
}()
time.Sleep(30 * time.Second)
c := cron.New()
c.AddFunc("@every 5m", func() { fmt.Println("hello") })
c.Start()
select {}