Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է ավարտել ծրագրի գործարկումը, երբ ներկայիս կոնտեքստում պահանջ է ներկայացվում նրա աշխատանքը դադարեցնելու համար։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, ճիշտ ավարտելու համար ծրագրի երբ պահանջվում է կանգնեցնել, սովորաբար օգտագործվում է կոնտեքստ (context.Context) հետ չեղարկմամբ: Սա թույլ է տալիս ուղարկել չեղարկման նշան goroutine-ներին և ճիշտ ավարտել նրանց:

Օրինակ՝

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() // ուղարկել չեղարկման նշան կոնտեքստին
    }()

    // Սկսել աշխատանքը, որը լսում է կոնտեքստը
    work(ctx)
}

func work(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Աշխատանքի ավարտ")
            return
        default:
            fmt.Println("Աշխատում ենք...")
            time.Sleep(1 * time.Second)
        }
    }
}

Այսպիսով, երբ համակարգային նշան ստացվի, ծրագիրը ճիշտ կերպով ավարտում է բոլոր գործընթացները և դուրս է գալիս։