Возможно ли выполнить одновременную запись данных в канал без использования буфера?

В Go каналы бывают буферизированными и небуферизированными. При небуферизированном канале запись (отправка) блокируется до тех пор, пока другой горутина не прочитает значение из канала.

Короткий ответ

Что ответить на собеседовании

В Go каналы бывают буферизированными и небуферизированными. При небуферизированном канале запись (отправка) блокируется до тех пор, пока другой горутина не прочитает значение из канала.

Подробный разбор

Ответ с пояснениями

В Go каналы бывают буферизированными и небуферизированными. При небуферизированном канале запись (отправка) блокируется до тех пор, пока другой горутина не прочитает значение из канала.

Одновременная запись в небуферизированный канал невозможна, потому что отправка блокируется до приёма, и только один отправитель может передать данные в момент времени.

Если нужно выполнить одновременную запись без блокировки, используют буферизированные каналы, где отправитель может положить данные в буфер, не ожидая немедленного приёма.

Пример небуферизированного канала:

ch := make(chan int) // небуферизированный канал

// Отправка блокируется, пока кто-то не прочитает
ch <- 1

Для одновременной записи без блокировки нужен буфер:

ch := make(chan int, 2) // буфер на 2 элемента
ch <- 1 // не блокируется
ch <- 2 // не блокируется

Итого: без буфера одновременная запись невозможна.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку