如何在Golang中使用Tickers?


經常會有這樣的情況:我們希望在特定時間間隔後重復執行特定任務。在Golang中,我們可以藉助**Tickers**來實現這一點。

我們也可以將它們與**goroutines**一起使用,以便在應用程式的後臺執行這些任務,而不會中斷應用程式的流程。

我們在Tickers中使用的函式是**NewTicker()**函式,它接受**時間**作為引數,我們可以為其提供**秒**甚至**毫秒**。

示例1

以下示例演示瞭如何在Golang中使用**Ticker**。請考慮以下程式碼。

package main

import (
   "fmt"
   "time"
)

func main() {
   fmt.Println("Starting the ticker")

   ticker := time.NewTicker(1 * time.Second)

   for _ = range ticker.C {
      fmt.Println("Ticking..")
   }
}

輸出

如果我們使用命令**go run main.go**執行上述程式碼,我們將得到以下輸出。

Starting the ticker
Ticking..
Ticking..

需要注意的是,除非我們強制停止,否則上述程式將一直執行。我們可以使用**CTRL+C**停止它。

示例2

我們還可以藉助**goroutines**在後臺執行Ticker。請考慮以下程式碼。

package main

import (
   "fmt"
   "time"
)

func inBackground() {
   ticker := time.NewTicker(1 * time.Second)

   for _ = range ticker.C {
      fmt.Println("Ticking..")
   }
}

func main() {
   fmt.Println("Starting the ticker")
   go inBackground()
   fmt.Println("After goroutine..")
   select {}
}

輸出

如果我們使用命令**go run main.go**執行上述程式碼,我們將得到以下輸出。

Starting the ticker
After goroutine..
Ticking..
Ticking..

需要注意的是,除非我們強制停止,否則上述程式將一直執行。我們可以使用**CTRL+C**停止它。

示例3

現在讓我們考慮Ticker的一個更高階的用例,在這個用例中,我們將使用一個通道和一個select語句,並且Ticker也將執行一段時間。

請考慮以下程式碼。

package main

import (
   "fmt"
   "time"
)

func main() {
   ticker := time.NewTicker(400 * time.Millisecond)
   done := make(chan bool)
   fmt.Println("Started!")
   go func() {
      for {
         select {
         case <-done:
            return
         case t := <-ticker.C:
            fmt.Println("Tick at", t)
         }
      }
   }()
   time.Sleep(1600 * time.Millisecond)
   ticker.Stop()
   done <- true
   fmt.Println("Stopped!")
}

輸出

如果我們使用命令**go run main.go**執行上述程式碼,我們將得到以下輸出。

Started!
Tick at 2009-11-10 23:00:00.4 +0000 UTC m=+0.400000001
Tick at 2009-11-10 23:00:00.8 +0000 UTC m=+0.800000001
Tick at 2009-11-10 23:00:01.2 +0000 UTC m=+1.200000001
Tick at 2009-11-10 23:00:01.6 +0000 UTC m=+1.600000001
Stopped!

更新於: 2021年11月1日

7K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告