Middle — Middle+
Кызматты же колдонмону жумшак токтотууну кантип ишке ашырасың, учурдагы абалды сактап калуу жана маалыматтарды жоготпоо үчүн?
sobes.tech AI
AIден жооп
Go тилинде кызматты же колдонмону жумшак токтотууну ишке ашыруу үчүн, адатта, иштөө тутумунун сигналдарын (мисалы, SIGINT, SIGTERM) иштетүү жана жокко чыгаруу контекстин (context.Context) колдонуу колдонулат. Бул учурда, жүрүп жаткан операцияларды туура аяктоо, абалды сактоо жана ресурстарды бошотуу мүмкүнчүлүгүн берет.
Мисал:
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() // контекстти жокко чыгаруу
}()
// негизги логиканы иштетүү, жокко чыгаруу менен
run(ctx)
}
func run(ctx context.Context) {
for {
select {
case <-ctx.Done():
// абалды сактоо, ресурстарды бошотуу
fmt.Println("абалды сактоо жана жабуу")
time.Sleep(2 * time.Second) // симуляция
return
default:
// негизги иш
fmt.Println("жумушта...")
time.Sleep(1 * time.Second)
}
}
}
Бул ыкма жумушту туура аяктоого, маалыматты жоготпой жана операцияларды күч менен үзгүлтүккө учуратпастан, ишти улантууга мүмкүндүк берет.