> Куда помещать горутину для чтения из канала в Go (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Горутину для чтения из канала обычно размещают в том же месте, где создаётся канал или где инициируется асинхронная обработка данных. В Go принято следовать принципу "не общайтесь через разделяемую память, а разделяйте память через общение", поэтому чтение из канала часто запускается в отдельной горутине сразу после его создания.

Пример:

GO
ch := make(chan int)
// Горутина для чтения из канала запускается рядом с его созданием
go func() {
for val := range ch {
fmt.Println("Получено:", val)
}
}()
// Отправка данных
ch <- 1
ch <- 2
close(ch)

Если чтение является частью более крупного воркера, горутину можно разместить в функции, которая принимает канал как параметр:

GO
func worker(ch <-chan int) {
for val := range ch {
// обработка
}
}
// Запуск
ch := make(chan int)
go worker(ch)

Ключевое правило: горутина для чтения должна быть запущена до того, как данные начнут отправляться в канал, чтобы избежать блокировки отправителя (если канал небуферизированный). Также важно предусмотреть корректное завершение чтения, например, через close(ch) или контекст.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью