Middle — Middle+
¿Cómo implementas una parada suave del servicio o aplicación para guardar el estado actual y finalizar sin pérdida de datos?
sobes.tech AI
Respuesta de la IA
Para implementar una parada suave de un servicio o aplicación en Go, generalmente se utilizan manejadores de señales del sistema operativo (por ejemplo, SIGINT, SIGTERM) y contextos con cancelación (context.Context). Esto permite finalizar correctamente las operaciones en curso, guardar el estado y liberar recursos.
Ejemplo:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Manejo de señales para parada suave
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Se recibió una señal de parada, comenzando la finalización...")
cancel() // Cancelar el contexto
}()
// Ejecutar lógica principal con soporte de cancelación
run(ctx)
}
func run(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Guardar estado, liberar recursos
fmt.Println("Guardando estado y finalizando")
time.Sleep(2 * time.Second) // simulación de guardado
return
default:
// Trabajo principal
fmt.Println("Trabajando...")
time.Sleep(1 * time.Second)
}
}
}
Este enfoque permite terminar el trabajo correctamente, sin perder datos ni interrumpir operaciones de forma forzada.