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.