Sobes.tech
Middle — Middle+

Xidmət və ya tətbiqin yumşaq dayandırılmasını necə həyata keçirirsiniz ki, cari vəziyyəti yadda saxlayasınız və məlumat itkisi olmadan bağlayasınız?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində xidmət və ya tətbiqi yumşaq şəkildə dayandırmaq üçün adətən əməliyyat sisteminin siqnallarını (məsələn, SIGINT, SIGTERM) və ləğv edilə bilən kontekst (context.Context) istifadə olunur. Bu, mövcud əməliyyatların düzgün şəkildə tamamlanmasına, vəziyyətin saxlanmasına və resursların azad edilməsinə imkan verir.

Nümunə:

package main

import (
    "context"
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {
    ctx, cancel := context.WithCancel(context.Background())

    // Yumşaq dayandırma üçün siqnalın idarə olunması
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        fmt.Println("Dayandırma siqnalı alındı, bağlanma başlanır...")
        cancel() // Konteksti ləğv et
    }()

    // Əsas məntiqi ləğv dəstəyi ilə işə sal
    run(ctx)
}

func run(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            // Vəziyyəti saxla, resursları azad et
            fmt.Println("Vəziyyəti saxla və bağla")
            time.Sleep(2 * time.Second) // simulasiya
            return
        default:
            // Əsas iş
            fmt.Println("İşləyir...")
            time.Sleep(1 * time.Second)
        }
    }
}

Bu yanaşma işi düzgün şəkildə sonlandırmağa, məlumat itkisini qarşısını almağa və əməliyyatları zorla dayandırmamağa imkan verir.