Golang Ticker loop to iterate over time.Tick channel

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:

Advertisement
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.

Advertisement

 

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?

 

Didn't find what you were looking for? Perform a quick search across GoLinuxCloud

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can either use the comments section or contact me form.

Thank You for your support!!

Leave a Comment

X