Junior — Middle
Чӣ гуна метавон иҷрои барномаро ба охир расонид, вақте ки дар контексти ҳозира дархости боздошти он мешавад?
sobes.tech AI
Ҷавоб аз AI
Дар Go, барои анҷоми дурустии барнома дар вақти дархости боздоштан одатан аз контекст (context.Context) бо бекоркунӣ истифода мешавад. Ин имкон медиҳад, ки сигнали бекоркунӣ ба goroutine-ҳо фиристода шавад ва онҳо дуруст анҷом дода шаванд.
Масалан:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Назорат кардани сигнали системавӣ барои боздоштан
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Сигнали боздошти қабул шуд")
cancel() // фиристодани сигнали бекоркунӣ ба контекст
}()
// оғоз кардани коре, ки контекстро мешунавад
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Иҷрои кор ба охир расид")
return
default:
fmt.Println("Мо кор мекунем...")
time.Sleep(1 * time.Second)
}
}
}
Бо ҳамин роҳ, вақте ки сигнали системавӣ қабул мешавад, барнома ҳамаи равандҳоро дуруст анҷом медиҳад ва мебарояд.