Sobes.tech
Junior — Middle

Wie kann man die Ausführung eines Programms beenden, wenn im aktuellen Kontext eine Anfrage zur Beendigung seiner Arbeit gestellt wird?

sobes.tech KI

Antwort von AI

In Go wird zur korrekten Beendigung eines Programms bei einer Stop-Anfrage in der Regel ein Kontext (context.Context) mit Abbruch verwendet. Dies ermöglicht das Senden eines Abbruchsignals an Goroutines und deren ordnungsgemäße Beendigung.

Beispiel:

package main

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

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

    // Überwachen von Systemsignalen zum Stoppen
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        fmt.Println("Stop-Signal empfangen")
        cancel() // Abbruchsignal an den Kontext senden
    }()

    // Arbeit starten, die den Kontext überwacht
    work(ctx)
}

func work(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Arbeit beenden")
            return
        default:
            fmt.Println("Arbeit läuft...")
            time.Sleep(1 * time.Second)
        }
    }
}

Auf diese Weise beendet das Programm bei Empfang eines Systemsignals alle Prozesse korrekt und beendet sich.