Junior — Middle
Go'da bağlam kullanarak goroutine'lerin çalışmasını nasıl düzgün şekilde durdurabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde goroutine'leri doğru şekilde durdurmak için sıklıkla context paketi kullanılır. İptal edilebilir bir bağlam (context.WithCancel) oluşturulur ve goroutine'ye iletilir. Goroutine içinde, bağlamın durumu periyodik olarak <-ctx.Done() aracılığıyla kontrol edilir. İptal fonksiyonu çağrıldığında, Done() kanalı kapanır ve goroutine düzgün şekilde sona erer.
Örnek:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine durduruldu")
return
default:
// işi yap
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// bir süre sonra goroutine'yi durdur
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // goroutine'nin bitmesine izin vermek için
}
Bu yaklaşım, goroutine'leri güvenli ve kontrollü bir şekilde sonlandırmayı sağlar, güvensiz yöntemler kullanmadan.