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.
No answers yet.
Inicia sesión para dejar una respuesta
Blogs
Docker y Swift: contenedorización de aplicaciones para iOS/macOS (nivel avanzado)
Cómo recortar std::string en C++: 5 formas prácticas para principiantes y expertos
Campos y propiedades en C#: ¿cuál es la diferencia y qué hay debajo del capó?