Junior — Middle
Ako možno ukončiť vykonávanie programu, keď je v aktuálnom kontexte požiadavka na jeho zastavenie?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa na správne ukončenie programu na požiadanie o zastavenie zvyčajne používa kontext (context.Context) s možnosťou zrušenia. To umožňuje odoslať signál zrušenia gorutinám a ich správne ukončiť.
Príklad:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Sledovanie systémových signálov na zastavenie
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Prijatý signál zastavenia")
cancel() // odoslanie signálu zrušenia do kontextu
}()
// Spustenie práce, ktorá počúva kontext
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Ukončenie práce")
return
default:
fmt.Println("Pracujeme...")
time.Sleep(1 * time.Second)
}
}
}
Týmto spôsobom, keď systém pošle signál, program správne ukončí všetky procesy a ukončí sa.