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