Gelecekte bir şeyler yapmak için time.Sleep kullanabiliriz. Sonsuz bir döngü kullandıysak bunu tekrar tekrar yapabiliriz. Ancak, time.Ticker adı verilen daha iyi bir seçenek var. Bu tür operasyonlar için tasarlanmıştır. Aşağıdaki örneklere bakın.


Sleep


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")
}
}
}

Ticker


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")
}
}
}

Sonuç


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