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)
        }
    }
}

Бо ҳамин роҳ, вақте ки сигнали системавӣ қабул мешавад, барнома ҳамаи равандҳоро дуруст анҷом медиҳад ва мебарояд.