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

  1. 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)
  1. 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.