Junior — Middle
Go-da goroutine-in vəziyyətini və sonlandırılmasını necə idarə etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da, goroutine-lərin vəziyyətinin idarə olunması və yekunlaşdırılması adətən kanallar (channels) və kontekstlər (context) vasitəsilə həyata keçirilir.
- Kanallar goroutine-lər arasında siqnalların ötürülməsinə imkan verir. Məsələn, bağlamanın lazım olduğunu bildirmək üçün kanal yarada bilərsiniz:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Goroutine-nin yekunlaşdırılması
default:
// İşləri yerinə yetir
}
}
}()
// Goroutine-ni dayandırmaq üçün:
close(stop)
- Kontekst paketi goroutine-lərin həyat müddətini idarə etmək üçün rahat bir üsul təqdim edir, xüsusən sorğular və ya uzunmüddətli əməliyyatlarla işləyərkən:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Goroutine-nin yekunlaşdırılması
default:
// İş
}
}
}(ctx)
// Dayandırmaq üçün:
cancel()
Bu şəkildə, goroutine-lər kanallar və ya kontekstlər vasitəsilə siqnalları dinləyir və siqnal alındıqda düzgün şəkildə yekunlaşır.