Junior — Middle
Bir dış sinyal veya koşula bağlı olarak tamamlanması gereken, sonucu henüz alınmamış olsa bile çalışan bir goroutine'yi nasıl doğru şekilde durdurabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde çalışan bir goroutine'yi dış bir sinyal veya koşul ile düzgün şekilde durdurmak için genellikle bağlam (context.Context) veya kanallar kullanılır ve iptal sinyali iletilir.
Bağlam kullanımıyla örnek:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// İptal sinyali alındı, goroutine sonlandırılıyor
return
default:
// İş yapılıyor
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Bir noktada, goroutine'yi durdurmak için cancel() çağrılır
cancel()
}
Bu yaklaşım, goroutine'nin düzenli olarak durdurma sinyali alınıp alınmadığını kontrol etmesini sağlar ve sonuç henüz alınmamış olsa bile düzgün şekilde sonlandırılır. Benzer şekilde, durdurma sinyalini iletmek için kanal da kullanılabilir, ancak context Go'da daha idiomatik ve kullanışlı bir yoldur.