Junior — Middle
Kuidas saab lõpetada programmi täitmise, kui praeguses kontekstis esitatakse taotluse selle töö lõpetamiseks?
sobes.tech AI
Vastus AI-lt
Go keeles, programmi õigeks lõpetamiseks, kui on taotlus seda peatada, kasutatakse tavaliselt konteksti (context.Context) koos tühistamisega. See võimaldab saata tühistamissignaali goroutine'idele ja neid õigesti lõpetada.
Näide:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Jälgime süsteemsignaale peatamiseks
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Peatamise signaal received")
cancel() // saada tühistamissignaal kontekstile
}()
// Alustame tööd, mis kuulab konteksti
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Töö lõpetatud")
return
default:
fmt.Println("Töötame...")
time.Sleep(1 * time.Second)
}
}
}
Selle meetodiga lõpetab programm õigesti kõik protsessid ja väljub, kui saab süsteemsignaali.