Назад к вопросам
Senior
4
Чем отличаются виды каналов в Go?
Компании, где спрашивали
Small
Ответ от нейросети
sobes.tech AI
В Go каналы бывают трёх видов по направлению передачи данных:
- Двунаправленные каналы — обычные каналы, которые могут использоваться и для отправки, и для получения данных.
ch := make(chan int) // двунаправленный канал
ch <- 10 // отправка
val := <-ch // получение
- Каналы только для отправки — объявляются с направлением
chan<-, позволяют только отправлять данные, получение из них невозможно.
var sendOnly chan<- int = ch
sendOnly <- 5 // отправка разрешена
// val := <-sendOnly // ошибка компиляции
- Каналы только для получения — объявляются с направлением
<-chan, позволяют только получать данные, отправка запрещена.
var recvOnly <-chan int = ch
val := <-recvOnly // получение разрешено
// recvOnly <- 5 // ошибка компиляции
Использование направленных каналов помогает повысить безопасность типов и сделать код более читаемым, явно указывая, где канал используется только для отправки или получения.