Sobes.tech
Назад к вопросам
Junior — Middle
78

Какими способами реализовать последовательное выполнение нескольких горутин с передачей данных между ними?

Компании, где спрашивали
Кредиска

Ответ от нейросети

sobes.tech AI

В Go для последовательного выполнения нескольких горутин с передачей данных между ними можно использовать следующие способы:

  1. Каналы (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
  1. WaitGroup + каналы — для контроля завершения горутин и последовательности.

  2. Передача данных через замыкания или структуры с синхронизацией — менее распространено, но возможно.

  3. Использование контекста (context.Context) — для управления временем жизни и отмены, но не для передачи данных напрямую.

Каналы — самый простой и надежный способ организовать последовательную обработку с передачей данных между горутинами.