Sobes.tech
Back to questions
Senior
3

Чем отличаются виды каналов в Go?

Companies where asked
Small

Answer from AI

sobes.tech AI

В Go каналы бывают трёх видов по направлению передачи данных:

  1. Двунаправленные каналы — обычные каналы, которые могут использоваться и для отправки, и для получения данных.
ch := make(chan int) // двунаправленный канал
ch <- 10             // отправка
val := <-ch          // получение
  1. Каналы только для отправки — объявляются с направлением chan<-, позволяют только отправлять данные, получение из них невозможно.
var sendOnly chan<- int = ch
sendOnly <- 5        // отправка разрешена
// val := <-sendOnly // ошибка компиляции
  1. Каналы только для получения — объявляются с направлением <-chan, позволяют только получать данные, отправка запрещена.
var recvOnly <-chan int = ch
val := <-recvOnly    // получение разрешено
// recvOnly <- 5    // ошибка компиляции

Использование направленных каналов помогает повысить безопасность типов и сделать код более читаемым, явно указывая, где канал используется только для отправки или получения.