Sobes.tech
Junior — Middle

De que formas implementar a execução sequencial de várias goroutines com transferência de dados entre elas?

sobes.tech IA

Resposta da IA

Em Go, para executar várias goroutines de forma sequencial com transferência de dados entre elas, pode usar as seguintes formas:

  1. Canais (channels) — a forma principal e mais idiomática de transferir dados entre goroutines. Pode criar um canal pelo qual uma goroutine envia dados, e a seguinte os recebe e processa, depois os transmite adiante.
ch1 := make(chan int)
ch2 := make(chan int)

// Primeira goroutine
go func() {
    ch1 <- 42 // enviamos dados
}()

// Segunda goroutine
go func() {
    val := <-ch1 // recebemos dados
    ch2 <- val * 2
}()

// A goroutine principal recebe o resultado
result := <-ch2
fmt.Println(result) // 84
  1. WaitGroup + canais — para controlar a finalização das goroutines e a sequência.

  2. Transferência de dados através de closures ou estruturas com sincronização — menos comum, mas possível.

  3. Uso do contexto (context.Context) — para gerir o tempo de vida e cancelamentos, mas não para transferência direta de dados.

Canais são a forma mais simples e confiável de organizar um processamento sequencial com transferência de dados entre goroutines.