Junior — Middle
Go'da goroutine'nin durumunu ve sonlandırılmasını nasıl yönetebilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da, goroutine'lerin durumunu yönetme ve sonlandırma genellikle kanallar (channels) ve bağlamlar (context) kullanılarak yapılır.
- Kanallar, goroutine'ler arasında sinyaller iletmek için kullanılır. Örneğin, bitirme ihtiyacını bildirmek için bir kanal oluşturabilirsiniz:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Goroutine'yi sonlandır
default:
// İş yap
}
}
}()
// Goroutine'yi durdurmak için:
close(stop)
- Bağlam paketi (context), özellikle istekler veya uzun süren işlemlerle çalışırken goroutine'lerin yaşam süresini yönetmenin uygun bir yolunu sağlar:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Goroutine'yi sonlandır
default:
// İş
}
}
}(ctx)
// Durdurmak için:
cancel()
Bu şekilde, goroutine'ler kanallar veya bağlamlar aracılığıyla sinyalleri dinler ve sinyal alındığında düzgün şekilde sona ererler.