Sobes.tech
Junior — Middle

Hozirgi kontekstda uning ishini to'xtatish so'rovi bo'lsa, dasturni qanday yakunlash mumkin?

sobes.tech AI

AIdan javob

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.