Sobes.tech
Junior — Middle

Kuidas saab lõpetada programmi täitmise, kui praeguses kontekstis esitatakse taotluse selle töö lõpetamiseks?

sobes.tech AI

Vastus AI-lt

Go keeles, programmi õigeks lõpetamiseks, kui on taotlus seda peatada, kasutatakse tavaliselt konteksti (context.Context) koos tühistamisega. See võimaldab saata tühistamissignaali goroutine'idele ja neid õigesti lõpetada.

Näide:

package main

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

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

    // Jälgime süsteemsignaale peatamiseks
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        fmt.Println("Peatamise signaal received")
        cancel() // saada tühistamissignaal kontekstile
    }()

    // Alustame tööd, mis kuulab konteksti
    work(ctx)
}

func work(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Töö lõpetatud")
            return
        default:
            fmt.Println("Töötame...")
            time.Sleep(1 * time.Second)
        }
    }
}

Selle meetodiga lõpetab programm õigesti kõik protsessid ja väljub, kui saab süsteemsignaali.