Sobes.tech
Junior — Middle

Hoe kan een programma worden beëindigd wanneer er een verzoek is om het in de huidige context te stoppen?

sobes.tech AI

Antwoord van AI

In Go wordt voor het correct afsluiten van een programma bij een stopverzoek meestal een context (context.Context) met annulering gebruikt. Dit stelt je in staat om een annuleringssignaal naar goroutines te sturen en ze correct te beëindigen.

Voorbeeld:

package main

import (
    "context"
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {
    ctx, cancel := context.WithCancel(context.Background())

    // Volg systeemsignalen voor stoppen
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        fmt.Println("Stop-signaal ontvangen")
        cancel() // stuur het annuleringssignaal naar de context
    }()

    // Start het werk dat naar de context luistert
    work(ctx)
}

func work(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Werk beëindigd")
            return
        default:
            fmt.Println("Aan het werk...")
            time.Sleep(1 * time.Second)
        }
    }
}

Op deze manier beëindigt het programma bij ontvangst van een systeemsignaal alle processen correct en sluit af.