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.