CodeBlanks Logo Icon CodeBlanks

Ana goroutine

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ılgan
  • sync.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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    work()
}()
____
Cevap
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

Orta seviye bölümündeki tüm dersler