Sobes.tech
Junior — Middle

Mevcut bağlamda çalışmayı durdurma isteği alındığında, program nasıl sonlandırılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, bir durdurma isteği üzerine programın düzgün şekilde sonlandırılması için genellikle iptal ile birlikte bir bağlam (context.Context) kullanılır. Bu, goroutine'lere iptal sinyali göndermeyi ve bunları düzgün şekilde sonlandırmayı sağlar.

Örnek:

package main

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

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

    // Sistem sinyallerini izleme ve durdurma
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    go func() {
        <-sigs
        fmt.Println("Durdurma sinyali alındı")
        cancel() // iptal sinyalini bağlama ile gönder
    }()

    // Bağlamı dinleyen işi başlat
    work(ctx)
}

func work(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("İşlem sonlandırılıyor")
            return
        default:
            fmt.Println("Çalışıyor...")
            time.Sleep(1 * time.Second)
        }
    }
}

Bu şekilde, işletim sistemi sinyali alındığında, program tüm süreçleri düzgün şekilde sonlandırır ve çıkar.