Junior — Middle
Kā var pabeigt programmas izpildi, kad tiek saņemts pieprasījums apturēt tās darbu pašreizējā kontekstā?
sobes.tech AI
Atbilde no AI
Go valodā, lai pareizi pabeigtu programmu, ja ir pieprasījums to apturēt, parasti izmanto kontekstu (context.Context) ar atcelšanu. Tas ļauj nosūtīt atcelšanas signālu gorutinām un tās pareizi pabeigt.
Piemērs:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Uzraudzīt sistēmas signālus apturēšanai
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Saņemts apturēšanas signāls")
cancel() // nosūtīt atcelšanas signālu kontekstam
}()
// Sākt darbu, kas klausās kontekstu
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Darbs pabeigts")
return
default:
fmt.Println("Strādājam...")
time.Sleep(1 * time.Second)
}
}
}
Ar šo pieeju, saņemot sistēmas signālu, programma pareizi pabeidz visus procesus un iziet.