Middle
Czym jest kanał w Go? Jakie są rodzaje kanałów? Czym różnią się kanały buforowane od niebuforowanych?
sobes.tech AI
Odpowiedź od AI
Kanał w Go to typ danych używany do przesyłania wartości między gorutynami, zapewniając synchronizację i wymianę danych.
Rodzaje kanałów:
- Kanały bez bufora — nie mają wewnętrznego bufora, wysyłanie blokuje się do momentu odczytania wartości przez odbiorcę.
- Kanały z buforem — mają wewnętrzny bufor o stałym rozmiarze, wysyłanie blokuje się tylko wtedy, gdy bufor jest pełny.
Różnice:
- W kanałach bez bufora, nadawca i odbiorca muszą być jednocześnie gotowi do wysłania/odbioru, co zapewnia ścisłą synchronizację.
- W kanałach z buforem, nadawca może umieścić kilka wartości w buforze bez oczekiwania na odbiorcę, dopóki bufor się nie zapełni.
Przykład tworzenia i użycia kanału z buforem:
ch := make(chan int, 2) // bufor na 2 elementy
ch <- 1
ch <- 2
// ch <- 3 // blokuje, dopóki nie zwolni się miejsce
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2