Junior — Middle
Jak ukončit běh programu, když v aktuálním kontextu dojde k požadavku na jeho zastavení?
sobes.tech AI
Odpověď od AI
V jazyce Go se pro správné ukončení programu při požadavku na zastavení obvykle používá kontext (context.Context) s možností zrušení. To umožňuje posílat signál zrušení gorutinám a je správně ukončit.
Příklad:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Sledování systémových signálů pro zastavení
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Přijat signál zastavení")
cancel() // odeslání signálu zrušení do kontextu
}()
// Spuštění práce, která poslouchá kontext
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Ukončení práce")
return
default:
fmt.Println("Pracujeme...")
time.Sleep(1 * time.Second)
}
}
}
Tímto způsobem program při přijetí signálu správně ukončí všechny procesy a ukončí se.