Middle — Middle+
Comment implémentes-tu un arrêt en douceur du service ou de l'application pour sauvegarder l'état actuel et terminer sans perte de données?
sobes.tech IA
Réponse de l'IA
Pour implémenter un arrêt en douceur d’un service ou d’une application en Go, on utilise généralement la gestion des signaux du système d’exploitation (par exemple, SIGINT, SIGTERM) et un contexte avec annulation (context.Context). Cela permet de terminer proprement les opérations en cours, de sauvegarder l’état et de libérer les ressources.
Exemple :
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Gestion des signaux pour un arrêt en douceur
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Signal d’arrêt reçu, début de la fermeture...")
cancel() // Annuler le contexte
}()
// Lancer la logique principale avec support de l’annulation
run(ctx)
}
func run(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Sauvegarder l’état, libérer les ressources
fmt.Println("Sauvegarde de l’état et fermeture")
time.Sleep(2 * time.Second) // simulation
return
default:
// Travail principal
fmt.Println("Travail en cours...")
time.Sleep(1 * time.Second)
}
}
}
Cette approche permet de terminer proprement le travail, sans perdre de données ni interrompre brutalement les opérations.