Sobes.tech
Junior — Middle

Beklenen değere ulaşılmadıysa, goroutine'un çalışmasını nasıl durdurabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, değeri bekleyen ancak bu değer gelmeyebilecek bir goroutine'yi durdurmak için genellikle zaman aşımı olan kanallar veya iptal edilen bir bağlam kullanılır.

Zaman aşımı örneği, select ve time.After kullanılarak:

select {
case val := <-ch:
    // değer alındı, çalışmaya devam et
case <-time.After(time.Second * 5):
    // zaman aşımı, goroutine'yi durdur
}

Başka bir yöntem ise dışarıdan iptal edilebilen bir bağlam (context.Context) kullanmaktır:

ctx, cancel := context.WithCancel(context.Background())

go func() {
    select {
    case val := <-ch:
        // val'i işle
    case <-ctx.Done():
        // goroutine'yi durdur
    }
}()

// kodun herhangi bir yerinde cancel() çağrılarak goroutine durdurulur

Bu şekilde, goroutine sonsuz beklemede kalmaz ve düzgün bir şekilde sona erdirilebilir.