Golang : Close channel after ticker stopped example
This is an example on how to close channel after the time.NewTicker()
function - ticker stopped. i.e close the channel when all goroutines are finished.
From the documentation http://golang.org/pkg/time/#Ticker.Stop :
Stop turns off a ticker. After Stop, no more ticks will be sent. Stop does not close the channel, to prevent a read from the channel succeeding incorrectly.
IF you are looking to close the channel, the example below maybe useful to you.
package main
import (
"fmt"
"time"
)
func keepTicking(f func()) chan bool {
done := make(chan bool, 1)
go func() {
ticker := time.NewTicker(time.Duration(1) * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
f()
case <-done:
fmt.Println("done")
return
}
}
}()
return done
}
func main() {
// continue ticking until 10 seconds and set done = true
done := keepTicking(func() {
fmt.Println("tick,tock.....")
})
time.Sleep(time.Duration(10) * time.Second)
// close the channel when all go routines are finished
close(done)
time.Sleep(time.Duration(10) * time.Second)
}
Output :
tick,tock.....
tick,tock.....
tick,tock.....
tick,tock.....
tick,tock.....
tick,tock.....
tick,tock.....
tick,tock.....
tick,tock.....
done
References :
https://www.socketloop.com/references/golang-time-newticker-stop-functions-and-ticker-type-example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+5.9k Golang : Calculate BMI and risk category
+20.2k Golang : Convert(cast) string to rune and back to string example
+12.2k Golang : Image to ASCII art example
+9.2k Golang : cannot assign type int to value (type uint8) in range error
+10.5k Golang : Concurrency and goroutine example
+10.7k Golang : Convert(cast) float to int
+5.7k Golang : Derive cryptographic key from passwords with Argon2
+4.6k Golang : What is StructTag and how to get StructTag's value?
+10k Golang : Intercept and process UNIX signals example
+5.1k Fix ERROR 2003 (HY000): Can't connect to MySQL server on 'IP address' (111)
+29.3k Golang : How to redirect to new page with net/http?
+32.4k Golang : Create x509 certificate, private and public keys