Avatar ·

Cómo esperar a que todas las goroutines terminen en Go sin usar time.Sleep

¡Hola a todos! Empecé a estudiar Go y me encontré con un problema de sincronización de goroutines. Estoy escribiendo un programa simple que lanza varias goroutines para procesar datos en paralelo, pero no logro que la función principal espere a que terminen. Aquí está mi código: ```go package main import ( "fmt" "time" ) func worker(id int) { fmt.Printf("Worker %d started\n", id) time.Sleep(2 * time.Second) // simulación de trabajo fmt.Printf("Worker %d finished\n", id) } func main() { for i := 1; i <= 5; i++ { go worker(i) } // El programa termina inmediatamente, sin esperar a las goroutines fmt.Println("Main function ended") } ``` El problema es que el programa termina al instante, sin esperar a que las goroutines se ejecuten. Sé que se puede usar `time.Sleep()`, pero es un parche — no sé el tiempo exacto de ejecución de cada goroutine. Además, no es confiable ni eficiente. ¿Cómo sincronizar correctamente las goroutines en Go? Necesito una solución robusta sin hardcode.