Sobes.tech
Junior — Middle

Jak správně číst data z kanálu bez bufferu?

sobes.tech AI

Odpověď od AI

V jazyce Go byste pro čtení dat z kanálu bez vyrovnávací paměti měli použít neblokující čtení nebo čtení s kontrolou dostupnosti dat. Kanály mohou být ve výchozím nastavení s nebo bez vyrovnávací paměti, ale pro čtení bez vyrovnávací paměti se obvykle používají nevyrovnané kanály a operátor <-.

Příklad čtení z nevyrovnaného kanálu:

ch := make(chan int) // nevyrovnaný kanál

// Odeslání v samostatné gorutině
go func() {
    ch <- 42
}()

// Čtení (bude čekat, dokud se data neobjeví)
value := <-ch
fmt.Println(value) // 42

Chcete-li zabránit blokování při čtení, můžete použít konstrukci s select a default:

select {
case val := <-ch:
    fmt.Println("Přijato", val)
default:
    fmt.Println("Žádná data")
}