Sobes.tech
Junior — Middle

¿Cómo se puede garantizar la finalización de todas las goroutines en ejecución en un programa?

sobes.tech AI

Respuesta de la IA

En Go no hay una forma incorporada de terminar forzosamente una goroutine desde fuera. Para garantizar que se espere a que terminen todas las goroutines en ejecución, generalmente se utiliza sincronización con sync.WaitGroup.

Principio de funcionamiento:

  • Antes de iniciar cada goroutine, se llama a wg.Add(1).
  • Dentro de la goroutine, al final, se llama a wg.Done().
  • En la función principal, se llama a wg.Wait(), que bloquea la ejecución hasta que el contador llegue a cero.

Ejemplo:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // trabajo de la goroutine
}()

wg.Wait() // esperar a que terminen todas las goroutines

De esta manera, el programa garantiza que esperará a que terminen todas las goroutines antes de continuar o finalizar.