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.