🟡 Средний · 2 очк. Каналы
Можно ли привести <-chan int обратно к chan int?
A Да
B Нет, сужение направления необратимо
C Через type assertion
D Через unsafe
Объяснение вопроса

Нет. Направление канала в типах Go нельзя "отменить": из chan int можно присвоить в <-chan int (только чтение) или chan<- int (только запись), но обратное присваивание недопустимо.

Зачем так сделано

Ограничение прав: если функция принимает <-chan int, она гарантированно не сможет закрыть канал и не будет писать в него. Приведение к chan int нарушило бы эту гарантию и потребовало бы небезопасного обхода типа (например, через unsafe или пакет reflect), что в обычном коде не делают.

var ch chan int = make(chan int)
var recv <-chan int = ch  // OK
var send chan<- int = ch   // OK
var ch2 chan int = recv    // ошибка компиляции
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.