I. Introduction to time.Tick channel
In this article, we are going through tickers in Go and the way to
iterate a Go time.Tick channel.
There are often cases where we would want to perform a particular task
after a specific interval of time repeatedly. In Golang, we achieve this
with the help of tickers.
We can create a ticker by NewTicker() function and stop it by Stop()
function. These two functions are described in the below table:
| Name | Description |
|---|---|
func NewTicker(d Duration) *Ticker |
NewTicker returns a new Ticker containing a channel that will send the current time on the channel after each tick. The period of the ticks is specified by the duration argument. |
func (t *Ticker) Stop() |
Stop turns off a ticker. After Stop, no more ticks will be sent. Stop does not close the channel, to prevent a concurrent goroutine reading from the channel from seeing an erroneous “tick”. |
II. Example 1: Using Golang ticker loop with Stop() function
In this example, we will create a ticker with a
for
loop and iterate it in another goroutine. After 7s, we call Stop()
function to turn off the ticker.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(2 * time.Second)
// Creating channel using make
tickerChan := make(chan bool)
go func() {
// Using for loop
for {
// Select statement
select {
// Case statement
case <-tickerChan:
return
// Case to print current time
case tm := <-ticker.C:
fmt.Println("The Current time is: ", tm)
}
}
}()
// Calling Sleep() method
time.Sleep(7 * time.Second)
// Calling Stop() method
ticker.Stop()
// Setting the value of channel
tickerChan <- true
// Printed when the ticker is turned off
fmt.Println("Ticker is turned off!")
}
Output:
The Current time is: 2022-09-11 21:42:57.3287283 +0700 +07 m=+2.011840401
The Current time is: 2022-09-11 21:42:59.3279005 +0700 +07 m=+4.011012601
The Current time is: 2022-09-11 21:43:01.3249886 +0700 +07 m=+6.008100701
Ticker is turned off!
Explanation: Firstly, a Ticker is created, then a
channel is created that
transmits time. After that, a loop is used in order to print the current
time, then the Ticker.Stop() method is called and the ticker is turned
off. Once a ticker is stopped it won’t receive any more values on its
channel.
II. Example 2: Using condition to break the Ticker loop
Here’s an example of using a ticker to call a function every 3 seconds until it is called 5 times. After the function is call 5 times, we will break the loop.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Start Ticker Example 1")
// define an interval and the ticker for this interval
interval := time.Duration(2) * time.Second
// create a new Ticker
tk := time.NewTicker(interval)
// start the ticker by constructing a loop
i := 0
for range tk.C {
i++
countFuncCall(i)
if i > 4 {
break
}
}
}
// define the function
func countFuncCall(i int) {
fmt.Println("Function is called: ", i, "times")
}
Output:
Start Ticker Example 1
Function is called: 1 times
Function is called: 2 times
Function is called: 3 times
Function is called: 4 times
Function is called: 5 times
Explanation: We create a variable ‘i’ to count the number of times the function is executed. For example, we want to execute the function 5 times so when the counter is greater than 4, we exit from the golang ticker loop.
IV. Summary
In this article, I demonstrated two methods for using Tickers. We can
use Stop() function or initialize condition to break the loop.
Tickers and goroutines
can be combined in a variety of ways to create background tasks. You can
learn more about tickers by reading
Golang Ticker
Explained in Detail [With Examples].
**V. References **
https://pkg.go.dev/time#Tick
How do I iterate
over a go time.Tick channel?


