> Куда помещать горутину для чтения из канала в Go (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Горутину для чтения из канала обычно размещают в том же месте, где создаётся канал или где инициируется асинхронная обработка данных. В Go принято следовать принципу "не общайтесь через разделяемую память, а разделяйте память через общение", поэтому чтение из канала часто запускается в отдельной горутине сразу после его создания.
Пример:
GOch := make(chan int)// Горутина для чтения из канала запускается рядом с его созданиемgo func() {for val := range ch {fmt.Println("Получено:", val)}}()// Отправка данныхch <- 1ch <- 2close(ch)
Если чтение является частью более крупного воркера, горутину можно разместить в функции, которая принимает канал как параметр:
GOfunc worker(ch <-chan int) {for val := range ch {// обработка}}// Запускch := make(chan int)go worker(ch)
Ключевое правило: горутина для чтения должна быть запущена до того, как данные начнут отправляться в канал, чтобы избежать блокировки отправителя (если канал небуферизированный). Также важно предусмотреть корректное завершение чтения, например, через close(ch) или контекст.
> Похожие задачи по backend
Где и как применялась Kafka
Как пришли в Go
Как отследить и исправить deadlock в Go при работе с каналами и горутинами
Как архитектурно передавать на фронт сложную структуру с вложенными полями и массивами
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью