Junior — Middle
¿Cómo se puede detener correctamente una goroutine en ejecución, si es necesario que finalice en función de una señal externa o condición, incluso si el resultado aún no se ha obtenido?
sobes.tech AI
Respuesta de la IA
Para detener correctamente una goroutine en ejecución mediante una señal externa o condición en Go, generalmente se utilizan context (context.Context) o canales para transmitir la señal de cancelación.
Ejemplo usando context:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Se recibió la señal de cancelación, terminando la goroutine
return
default:
// Realizar trabajo
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// En algún momento, llamamos a cancel() para detener la goroutine
cancel()
}
Este enfoque permite que la goroutine verifique periódicamente si se ha enviado una señal de parada y finalice correctamente, incluso si aún no se ha obtenido un resultado. De manera similar, se puede usar un canal para transmitir la señal de parada, pero context es una forma más idiomática y conveniente en Go.