Sobes.tech
Junior — Middle

Cari kontekstdə işləməni dayandırmaq üçün sorğu alındıqda, proqramı necə bitirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go tilida, to‘xtash so‘rovi bo‘yicha dastur to‘g‘ri yakunlanishi uchun odatda bekor qilish bilan kontekst (context.Context) ishlatiladi. Bu goroutinlarga bekor qilish signalini yuborish va ularni to‘g‘ri yakunlash imkonini beradi.

Misol:

package main

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

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

    // Tizim signallarini kuzatish va to‘xtatish
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        fmt.Println("To‘xtash signali olindi")
        cancel() // kontekstga bekor qilish signalini yuborish
    }()

    // Kontekstni tinglaydigan ishni boshlash
    work(ctx)
}

func work(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Ishni yakunlash")
            return
        default:
            fmt.Println("Ishlamoqda...")
            time.Sleep(1 * time.Second)
        }
    }
}

Shu tarzda, operatsion tizim signali olinsa, dastur barcha jarayonlarni to‘g‘ri yakunlaydi va chiqadi.