Avatar ·

Como esperar todas as goroutines terminarem em Go sem usar time.Sleep?

Olá a todos! Comecei a estudar Go e me deparei com um problema de sincronização de goroutines. Estou escrevendo um programa simples que inicia várias goroutines para processamento paralelo de dados, mas não consigo fazer a função principal esperar por elas. Aqui está meu código: ```go package main import ( "fmt" "time" ) func worker(id int) { fmt.Printf("Worker %d started\n", id) time.Sleep(2 * time.Second) // simulação de trabalho fmt.Printf("Worker %d finished\n", id) } func main() { for i := 1; i <= 5; i++ { go worker(i) } // O programa termina imediatamente, sem esperar as goroutines fmt.Println("Main function ended") } ``` O problema é que o programa termina instantaneamente, sem esperar a execução das goroutines. Eu sei que posso usar `time.Sleep()`, mas isso é uma gambiarra — não sei o tempo exato de execução de cada goroutine. Além disso, não é confiável nem eficiente. Como sincronizar goroutines corretamente em Go? Preciso de uma solução robusta sem hardcode.