10/06/2020 - GO
We can use time.Sleep
to do something in the future. We can do it repeatedly if we used an infinite loop. However, there is a better option which is called time.Ticker. It is designed for such operations. See examples below.
package main
import (
"log"
"time"
)
func main() {
done := make(chan struct{})
defer close(done)
run(done)
}
func run(done <-chan struct{}) {
i := 1
for {
// Do something here
log.Println(i, "done")
i++
if i == 4 {
return
}
select {
case <-done:
return
default:
time.Sleep(time.Second)
log.Println("redo")
}
}
}
package main
import (
"log"
"time"
)
func main() {
done := make(chan struct{})
defer close(done)
run(done)
}
func run(done <-chan struct{}) {
i := 1
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
// Do something here
log.Println(i, "done")
i++
if i == 4 {
return
}
select {
case <-done:
return
case <-ticker.C:
log.Println("redo")
}
}
}
2020/06/16 21:49:27 1 done
2020/06/16 21:49:28 redo
2020/06/16 21:49:28 2 done
2020/06/16 21:49:29 redo
2020/06/16 21:49:29 3 done