Sobes.tech
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ę.