Три типа каналов в Go:
// 1. Двунаправленный (по умолчанию)
ch := make(chan int)
// 2. Только для отправки
func producer(ch chan<- int) {
ch <- 42
}
// 3. Только для чтения
func consumer(ch <-chan int) {
val := <-ch
}
Также каналы делятся по буферизации:
- Небуферизованный
make(chan int)— отправитель блокируется пока получатель не прочитает - Буферизованный
make(chan int, 100)— отправитель блокируется только когда буфер полон