Как передаются данные в небуферизированный канал

«Как передаются данные в небуферизированный канал» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Небуферизированные каналы в Go работают по принципу синхронного обмена данными. Отправка (ch <- data) блокирует горутину до тех пор, пока другая горутина не выполнит чтение (<-ch), и наоборот.

Пример:

ch := make(chan int) // небуферизированный канал
go func() {
    ch <- 42 // блокируется, пока main() не прочитает
}()
val := <-ch // получает 42

Ключевые особенности:

  1. Обязательное соответствие операций отправки/приема
  2. Deadlock при отсутствии получателя/отправителя
  3. Гарантирует, что данные будут переданы напрямую между горутинами