Açıklaması şöyledir:
tekrar adında bir zamanlayıcı oluşturduk ve bu zamanlayıcının özelliği her yarım saniyede bir tetiklenmesi.
bitti adında, boolean değer taşıyan bir kanal oluşturduk. Bu kanalın mantığı ileride anlayacaksınız.
Anonim Goroutine fonksiyonunun içine, yani go func(), sınırsız döngü çeviren bir for oluşturduk. Bu döngünün içerisinde select ile kanal iletişimlerimizi dinledik. Döngümüzün sonlanması için bitti kanalına herhangi bir veri gelmesi gerekiyor. Aşağısındaki case‘de zaman değişkenimize tekrar zamanlayıcımız tetiklendikçe bu durum çalışacak. (tekrar.C ile zaman bilgisini alıyoruz.) Yani yarım saniyede bir zaman kanalına veri gelecek.
Anonim Goroutine fonksiyonu, main() fonksiyonundan ayrı olarak çalıştığından bu fonksiyonumuzun çalışması için ona zaman aralığı vermemiz gerekiyor. time.Sleep(1600 * time.Millisecond) ile main() fonksiyonumuzu 1,6 saniye bekletiyoruz. Bu bekleme süresi içinde tekrar zamanlayıcımız 3 kere tetikleniyor. (500 * x < 1600 | x = 3) Haliyle de 3 kere ekrana çıktımızı bastırıyor. 1,6 saniye geçtikten sonra tekrar zamanlayımızı tekrar.Stop() ile durduruyoruz.
bitti kanalına değer yollayarak, yukarıdaki for döngümüzü return ile sonlandırmış oluyoruz.
Ve en son ekranımıza “Tekrarlayıcı durdu!” yazımızı bastırıyoruz.
Çıktımız aşağıdaki gibi olacaktır: