Junior — Middle
Hogyan lehet befejezni egy program futását, amikor a jelenlegi kontextusban kérik a leállítást?
sobes.tech MI
Válasz az MI-től
Go nyelven a program helyes befejezéséhez leállítási kérés esetén általában egy (context.Context) kontextust használunk, amelyet lemondásra lehet állítani. Ez lehetővé teszi a lemondási jel küldését a goroutine-oknak, és azok helyes befejezését.
Példa:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Rendszerjelek figyelése a leálláshoz
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Leállítási jel érkezett")
cancel() // lemondási jel küldése a kontextusnak
}()
// Munka indítása, ami figyeli a kontextust
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Munka befejezése")
return
default:
fmt.Println("Dolgozunk...")
time.Sleep(1 * time.Second)
}
}
}
Így, amikor a rendszer jelet kap, a program helyesen zárja le az összes folyamatot és kilép.