De que maneiras é realizado o controlo e a coordenação do trabalho das goroutines em Go?
sobes.tech IA
Resposta da IA
No Go, o controlo e a coordenação das goroutines são realizados de várias maneiras:
-
Canais (channels) — mecanismo principal para troca de dados e sincronização entre goroutines. Os canais permitem transmitir valores de forma segura e bloqueiam o remetente ou o destinatário até que estejam prontos.
-
sync.WaitGroup — usado para esperar que um grupo de goroutines termine. Permite que a goroutine principal aguarde até que todas as goroutines lançadas terminem.
-
Contexto (context.Context) — utilizado para gerir o tempo de vida das goroutines, transmitir sinais de cancelamento e limites de tempo.
-
Mutexes e outras primitivas do pacote sync — para proteger recursos partilhados e evitar condições de corrida.
Exemplo com WaitGroup e canal:
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
ch <- 42 // envia valor
}()
go func() {
val := <-ch // recebe valor
fmt.Println(val)
}()
wg.Wait() // espera terminar
Desta forma, a combinação de canais e primitivas de sincronização permite gerir eficazmente a execução paralela das goroutines.