Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

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