Junior — Middle
Jak prawidłowo odczytywać dane z kanału bez bufora?
sobes.tech AI
Odpowiedź od AI
W Go, aby odczytać dane z kanału bez bufora, należy użyć nieblokującego odczytu lub odczytu z kontrolą dostępności danych. Kanały domyślnie mogą być z buforem lub bez, ale aby czytać bez bufora, zwykle używa się kanałów bez bufora i operatora <-.
Przykład odczytu z kanału bez bufora:
ch := make(chan int) // kanał bez bufora
// Wysyłanie w osobnej goroutine
go func() {
ch <- 42
}()
// Odczyt (będzie czekać, aż dane się pojawią)
value := <-ch
fmt.Println(value) // 42
Aby uniknąć blokowania podczas odczytu, można użyć konstrukcji z select i default:
select {
case val := <-ch:
fmt.Println("Otrzymano", val)
default:
fmt.Println("Brak danych")
}