Канал Go — типизированный механизм передачи значений между горутинами. Буферизированный канал хранит очередь значений до своей ёмкости, небуферизированный синхронизирует отправителя и получателя.
Что такое канал и что он хранит?
Канал Go — типизированный механизм передачи значений между горутинами. Буферизированный канал хранит очередь значений до своей ёмкости, небуферизированный синхронизирует отправителя и получателя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Канал Go — типизированный механизм передачи значений между горутинами. Буферизированный канал хранит очередь значений до своей ёмкости, небуферизированный синхронизирует отправителя и получателя.
ch := make(chan int, 2)
ch <- 10
value := <-ch
_ = value
Отправляется значение соответствующего типа; для указателя копируется указатель, а не весь объект. Небуферизированная передача ждёт встречной операции. Из закрытого канала сначала читают накопленное, затем нулевое значение с ok=false. Отправка в закрытый канал вызывает panic, операции с nil-каналом блокируются.