CodeBlanks Logo Icon CodeBlanks

default ve non-blocking

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

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)
    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

Soru
select {
case v := <-ch:
    fmt.Println(v)
____:
    fmt.Println("boş")
}
Cevap
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

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