select nedir?
- Go kursu
- Orta seviye
- Ders 13/80
- 4 dk
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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
____ {
case v := <-ch1:
fmt.Println(v)
case ch2 <- 1:
fmt.Println("sent")
}
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 |