CodeBlanks Logo Icon CodeBlanks

select nedir?

select ile birden çok channel'ı beklemeyi öğrenirsin.

select nedir?

select, birden çok channel işlemini aynı anda bekleyen bir kontroldür. switch'e benzer ama case'ler channel işlemidir. Hazır olan case çalışır; birden fazlası hazırsa rastgele biri seçilir.

select, bir goroutine'in birden çok olaya tepki vermesini sağlar. Zaman aşımı (timeout), iptal (cancel) veya çoklu veri kaynağı için standart araçtır.

select yapısı

select bloğu case'lerden oluşur. Her case bir channel işlemidir: case v := <-ch1: veya case ch2 <- 1:. Hazır olan case'in gövdesi çalışır.

Eğer hiçbir case hazır değilse default varsa o çalışır, yoksa select bloklanır. Birden fazla case hazırsa Go rastgele birini seçer; bu adil (fair) dağılım sağlar.

Uygulama select ile bekle

main içine bir select { ... } bloğu ve fmt.Println ile select hazır 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() {
    ch := make(chan string)
    go func() { ch <- "select hazır" }()
    select {
    case m := <-ch:
        fmt.Println(m)
    }
}

Beklenen çıktı

select hazır

Soru ve cevaplar

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

1 select neyi bekler?

  • Döngüleri
  • Birden çok channel Doğru cevap
  • Tek bir channel
  • Hataları

Açıklama: birden çok channel. Tek channel için doğrudan <-ch yeterlidir.

2 select bloğu

Soru
____ {
    case v := <-ch1:
        fmt.Println(v)
    case ch2 <- 1:
        fmt.Println("sent")
}
Cevap
select {
    case v := <-ch1:
        fmt.Println(v)
    case ch2 <- 1:
        fmt.Println("sent")
}

Açıklama: switch değer karşılaştırır, select channel bekler.

3 select kavramlarını eşleştir

Kavram Anlamı
select Çoklu bekleme
case Channel işlemi
default Hazır olmayınca
rastgele Birden fazla hazır

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