Sobes.tech
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")
}