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)
}
}
}
ამ გზით, სისტემის სიგნალის მიღებისას, პროგრამა სწორად ასრულებს ყველა პროცესს და გამოდის.