Junior — Middle
¿Cómo se puede detener correctamente la ejecución de goroutines utilizando context en Go?
sobes.tech AI
Respuesta de la IA
Para detener correctamente las goroutines en Go, a menudo se utiliza el paquete context. Se crea un contexto con la capacidad de cancelación (context.WithCancel), que se pasa a la goroutine. Dentro de la goroutine, se verifica periódicamente el estado del contexto a través de <-ctx.Done(). Cuando se llama a la función de cancelación, el canal Done() se cierra, y la goroutine puede finalizar correctamente.
Ejemplo:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine detenida")
return
default:
// realizar trabajo
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// después de un tiempo, detener la goroutine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // para que la goroutine tenga tiempo de terminar
}
Este enfoque permite terminar las goroutines de manera segura y controlada sin usar métodos inseguros.