10/06/2020 - GO
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.
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