CodeBlanks Logo Icon CodeBlanks

Goroutine ve fonksiyon

Fonksiyonu goroutine olarak çağırmayı öğrenirsin.

Goroutine ve fonksiyon

Herhangi bir func'ı goroutine olarak çağırabilirsin. go greet("Ayşe") greet fonksiyonunu arka planda başlatır. Fonksiyon imzası aynı kalır; yalnızca çağrı şekli değişir.

Parametreler çağrı anında kopyalanır ve goroutine'e iletilir. Bu yüzden döngüde go f(i) yazmak güvenlidir: her goroutine kendi i değerini alır.

Fakat fonksiyon değer döndürüyorsa bu değeri goroutine'den alamazsın. Sonucu channel'a göndermek veya shared state yazmak gerekir.

Döngüde goroutine

Bir döngüde birden çok goroutine başlatmak yaygındır: for i := 0; i < 3; i++ { go f(i) }. Her yinelemede yeni bir goroutine başlar ve kendi i kopyasını alır.

Go 1.22'den önce döngü değişkeni paylaşıldığı için tüm goroutine'ler aynı (son) değeri görürdü. Go 1.22+ bu davranışı düzeltti: her yineleme ayrı bir değişken oluşturur.

Yine de senkronizasyon gerekir: ana program goroutine'ler bitmeden çıkarsa çıktı kaybolur. sync.WaitGroup veya channel ile bekleme yapılır.

Uygulama Fonksiyonu goroutine çağır

main içine bir go greet() çağrısı ve fmt.Println ile fonksiyon çağrıldı 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 greet() {
    fmt.Println("fonksiyon çağrıldı")
}

func main() {
    go greet()
    fmt.Println("fonksiyon çağrıldı")
}

Beklenen çıktı

fonksiyon çağrıldı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 go f(i) çağrısında i nasıl iletilir?

  • Değer olarak kopyalanır Doğru cevap
  • Channel ile
  • Referans olarak
  • Pointer olarak

Açıklama: değer olarak kopyalanır. Referans veya pointer açıkça belirtilmeli.

2 Döngüde goroutine çağrısı

Soru
for i := 0; i < 3; i++ {
    ____ f(i)
}
Cevap
for i := 0; i < 3; i++ {
    go f(i)
}

Açıklama: for döngü, go goroutine başlatır.

3 Fonksiyon-goroutine eşleştir

Kavram Anlamı
go f(i) Döngüde goroutine
parametre Kopyalanır
dönüş Doğrudan alınamaz
WaitGroup Bekleme

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