Junior — Middle
Kako završiti izvršavanje programa kada u trenutnom kontekstu dođe do zahteva za zaustavljanje njegovog rada?
sobes.tech АИ
Одговор од АИ
U Go jeziku, za ispravno zatvaranje programa na zahtev za zaustavljanje obično se koristi kontekst (context.Context) sa otkazivanjem. To omogućava slanje signala otkazivanja gorutinama i njihovo pravilno zatvaranje.
Primer:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Praćenje sistemskih signala za zaustavljanje
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Primljen signal za zaustavljanje")
cancel() // slanje signala otkazivanja kontekstu
}()
// Pokretanje rada koji sluša kontekst
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Završetak rada")
return
default:
fmt.Println("Radimo...")
time.Sleep(1 * time.Second)
}
}
}
Na ovaj način, kada sistem pošalje signal, program pravilno zatvara sve procese i izlazi.