> Какие способы общения между goroutine существуют в Go (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go
> Пример ответа
В Go общение между горутинами строится на принципе: "Не общайтесь через разделяемую память, а разделяйте память через общение". Основные способы:
-
Каналы (channels) - основной и рекомендуемый способ. Каналы бывают небуферизированные (синхронные) и буферизированные (асинхронные). Используются для передачи данных и сигналов. Пример:
GOch := make(chan int)go func() { ch <- 42 }()value := <-ch -
Select - позволяет горутине ожидать несколько каналов одновременно, обрабатывая первый готовый. Полезен для таймаутов, отмены операций и мультиплексирования.
-
WaitGroup из пакета
sync- для ожидания завершения группы горутин. Не передаёт данные, только синхронизирует. -
Mutex (
sync.Mutex) - для защиты разделяемых данных при доступе из нескольких горутин. Используется реже, когда каналы избыточны (например, для кэша). -
Context (
context.Context) - для отмены горутин, передачи таймаутов и значений (например, request-scoped данных). Часто комбинируется с select. -
Atomic операции (
sync/atomic) - для простых счётчиков или флагов без блокировок.
На практике предпочтение отдаётся каналам и select, так как они встроены в модель конкурентности Go и снижают риск гонок данных. Mutex и atomic - для низкоуровневых оптимизаций, когда каналы создают излишние накладные расходы.
> Похожие задачи по Go
Как прервать выполнение goroutine без остановки главной программы в Go
Какие инструменты для профилирования сервисов на Go существуют и как их использовать
Где размещать воркеры, читающие данные из Kafka и отправляющие в аналитику
Зачем создавать отдельный сервис воркер для аналитики вместо обработки в ордер сервисе
> Похожие задачи по backend
Как прервать выполнение goroutine без остановки главной программы в Go
Какие инструменты для профилирования сервисов на Go существуют и как их использовать
Где размещать воркеры, читающие данные из Kafka и отправляющие в аналитику
Зачем создавать отдельный сервис воркер для аналитики вместо обработки в ордер сервисе
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью