Junior — Middle
Comment peut-on terminer l'exécution d'un programme lorsqu'une demande d'arrêt de son fonctionnement est faite dans le contexte actuel?
sobes.tech IA
Réponse de l'IA
En Go, pour terminer correctement un programme lors d'une demande d'arrêt, on utilise généralement un contexte (context.Context) avec annulation. Cela permet d'envoyer un signal d'annulation aux goroutines et de les terminer proprement.
Exemple :
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Surveiller les signaux système pour arrêter
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Signal d'arrêt reçu")
cancel() // envoyer le signal d'annulation au contexte
}()
// Lancer le travail qui écoute le contexte
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Fin du travail")
return
default:
fmt.Println("Travail en cours...")
time.Sleep(1 * time.Second)
}
}
}
Ainsi, lorsque le signal du système d'exploitation est reçu, le programme termine proprement tous les processus et sort.