Middle — Middle+
Xizmat yoki ilovani yumshoq to'xtatishni qanday amalga oshirasiz, hozirgi holatni saqlash va ma'lumotlarni yo'qotmasdan yakunlash uchun?
sobes.tech AI
AIdan javob
Go tilida xizmat yoki ilovani yumshoq to'xtatish uchun odatda operatsion tizim signallarini (masalan, SIGINT, SIGTERM) va bekor qilish kontekstini (context.Context) ishlatishadi. Bu joriy operatsiyalarni to'g'ri yakunlash, holatni saqlash va resurslarni bo'shatish imkonini beradi.
Misol:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Yumshoq to'xtash uchun signalni boshqarish
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("To'xtash signali olindi, yopilish boshlanmoqda...")
cancel() // Kontekstni bekor qilish
}()
// Asosiy mantiqni bekor qilish bilan ishga tushirish
run(ctx)
}
func run(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Holatni saqlash, resurslarni bo'shatish
fmt.Println("Holatni saqlash va yopish")
time.Sleep(2 * time.Second) // simulyatsiya
return
default:
// Asosiy ish
fmt.Println("Ishlamoqda...")
time.Sleep(1 * time.Second)
}
}
}
Ushbu yondashuv ishni to'g'ri yakunlash, ma'lumotlarni yo'qotmaslik va operatsiyalarni majburan to'xtatmaslik imkonini beradi.