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)
}
}
}
Այսպիսով, երբ համակարգային նշան ստացվի, ծրագիրը ճիշտ կերպով ավարտում է բոլոր գործընթացները և դուրս է գալիս։