Sobes.tech
Junior — Middle

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.