Sobes.tech
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.