Назад к вопросам
Junior — Middle
78
Какими способами реализовать последовательное выполнение нескольких горутин с передачей данных между ними?
Компании, где спрашивали
Кредиска
Ответ от нейросети
sobes.tech AI
В Go для последовательного выполнения нескольких горутин с передачей данных между ними можно использовать следующие способы:
- Каналы (channels) — основной и самый идиоматичный способ передачи данных между горутинами. Можно создать канал, по которому одна горутина отправляет данные, а следующая их принимает и обрабатывает, затем передает дальше.
ch1 := make(chan int)
ch2 := make(chan int)
// Первая горутина
go func() {
ch1 <- 42 // отправляем данные
}()
// Вторая горутина
go func() {
val := <-ch1 // получаем данные
ch2 <- val * 2
}()
// Главная горутина получает результат
result := <-ch2
fmt.Println(result) // 84
-
WaitGroup + каналы — для контроля завершения горутин и последовательности.
-
Передача данных через замыкания или структуры с синхронизацией — менее распространено, но возможно.
-
Использование контекста (context.Context) — для управления временем жизни и отмены, но не для передачи данных напрямую.
Каналы — самый простой и надежный способ организовать последовательную обработку с передачей данных между горутинами.