default ve non-blocking
- Go kursu
- Orta seviye
- Ders 15/80
- 4 dk
default ile non-blocking gönderme ve almayı öğrenirsin.
default ve non-blocking
select'e default eklersen hiçbir case hazır değilse default çalışar ve select bloklanmaz. Bu, non-blocking gönderme/alma yapmayı sağlar.
Non-blocking alma: select { case v := <-ch: ... default: }. Channel'da veri yoksa default çalışır. Bu, goroutine'in veri varsa al, yoksa başka iş yap deseninde kullanılır.
Non-blocking desen
Non-blocking desen, bir goroutine'in channel'ı kontrol edip boşsa başka iş yapmasını sağlar. Bu, meşgul bekleme (busy wait) yerine verimli bir denetim yöntemidir.
select { case x := <-ch: handle(x) default: doOther() } kalıbı sık görülür. Channel'da veri varsa işler, yoksa diğer işe geçer. Bu, olay döngülerinin (event loop) temelidir.
Uygulama Non-blocking select
main içine bir select { case ... default: ... } bloğu ve fmt.Println ile non-blocking 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)
select {
case m := <-ch:
fmt.Println(m)
default:
fmt.Println("non-blocking")
}
}Beklenen çıktı
non-blocking
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 default case ne zaman çalışır?
- Hiçbir case hazır değilse Doğru cevap
- Her zaman
- İlk case hazır değilse
- Sadece hata durumunda
Açıklama: hiçbir case hazır değilse.
2 default anahtar kelimesi
select {
case v := <-ch:
fmt.Println(v)
____:
fmt.Println("boş")
}
select {
case v := <-ch:
fmt.Println(v)
default:
fmt.Println("boş")
}
Açıklama: else select'te değil, if/switch'te kullanılır.
3 default kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
default |
Hazır olmayınca |
non-blocking |
Beklemez |
case |
Channel işlemi |
select |
Çoklu bekleme |