Ana goroutine
- Go kursu
- Orta seviye
- Ders 4/80
- 4 dk
main fonksiyonunun kendisinin bir goroutine olduğunu öğrenirsin.
Ana goroutine
main fonksiyonunun kendisi bir goroutine'dir: ana goroutine. Program başlayınca Go çalışma zamanı main'i başlatır; main sona erince tüm diğer goroutine'ler de anında biter.
Bu yüzden bir goroutine başlatıp hemen main'den çıkarsan çıktıyı hiç göremezsin. Önce goroutine'in bitmesini beklemen gerekir: time.Sleep, channel veya sync.WaitGroup ile.
time.Sleep basit ama güvenilmezdir; production'da channel veya WaitGroup tercih edilir. Süre yeterli gelmeyebilir.
Bekleme yöntemleri
Goroutine'leri beklemenin üç yaygın yolu vardır:
time.Sleep: basit ama kırılgansync.WaitGroup: sayar, bitince serbest bırakır- channel: goroutine bitti sinyali gönderir
WaitGroup en yaygın production seçeneğidir. wg.Add(1) ile sayaç artırılır, goroutine içinden wg.Done() ile azaltılır, ana program wg.Wait() ile bekler.
Uygulama Ana goroutine yazdır
main içine bir fmt.Println satırı ve fmt.Println ile ana goroutine yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func main() {
fmt.Println("ana goroutine")
}Beklenen çıktı
ana goroutine
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Ana program biterse goroutine'lere ne olur?
- Beklenir
- Hemen biterler Doğru cevap
- Channel'a taşınır
- Arka planda devam eder
Açıklama: hemen biterler. Go goroutine'leri ana programdan bağımsız yaşayamaz.
2 WaitGroup bekleme
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
work()
}()
____
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
work()
}()
wg.Wait()
Açıklama: wg.Wait() ana programı bekletir.
3 Bekleme yöntemlerini eşleştir
| Kavram | Anlamı |
|---|---|
time.Sleep |
Kırılgan |
WaitGroup |
Production |
channel |
Sinyal |
main |
Ana goroutine |