Junior — Middle
Jak odbywa się przesyłanie danych przez niebuforowany kanał?
sobes.tech AI
Odpowiedź od AI
W Go, niebuforowany kanał (channel bez bufora) zapewnia synchroniczną wymianę danych między gorutynami. Oznacza to, że wysłanie wartości do kanału blokuje się do momentu, gdy inna gorutyna ją odebra, i odwrotnie — odbiór blokuje się, dopóki nie pojawi się wartość do odczytu.
W ten sposób przesyłanie danych przez niebuforowany kanał odbywa się z synchronizacją nadawcy i odbiorcy, co gwarantuje wymianę danych bez pośredniego przechowywania.
Przykład:
ch := make(chan int) // niebuforowany kanał
go func() {
ch <- 42 // wysyłanie blokuje się, dopóki ktoś nie odczyta
}()
value := <-ch // odbiór blokuje wykonanie, dopóki nie pojawi się wartość
fmt.Println(value) // wyświetli 42
W tym przykładzie goroutine wysyła liczbę do kanału i blokuje się do momentu, gdy główna goroutine odczyta tę liczbę.