Sobes.tech
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)
        }
    }
}

Ин усул имкон медиҳад, ки корро дуруст ба анҷом расонед, маълумотро гум накунед ва амалиётҳоро маҷбурӣ қатъ накунед.