Sobes.tech
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.