Junior — Middle
¿Cómo se puede finalizar la ejecución de un programa cuando se realiza una solicitud para detener su trabajo en el contexto actual?
sobes.tech AI
Respuesta de la IA
En Go, para finalizar correctamente un programa al solicitar una parada, generalmente se usa un contexto (context.Context) con cancelación. Esto permite enviar una señal de cancelación a las goroutines y terminarlas correctamente.
Ejemplo:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Seguimos las señales del sistema para detener
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Señal de parada recibida")
cancel() // enviamos la señal de cancelación al contexto
}()
// Ejecutamos el trabajo que escucha el contexto
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Finalizando trabajo")
return
default:
fmt.Println("Trabajando...")
time.Sleep(1 * time.Second)
}
}
}
De esta manera, al recibir la señal del sistema operativo, el programa finaliza correctamente todos los procesos y sale.