Sobes.tech
Junior — Middle

Gözlənilən nəticə alınmadıqda, switch-case quruluşundan istifadə edərək goroutine-in təhlükəsiz şəkildə necə başa çatdırılır?

sobes.tech Süni İntellekt

AI-dan cavab

Təhlükəsiz şəkildə gorutini sonlandırmaq üçün, nəticəni gözləyərkən select quruluşundan istifadə etmək mümkündür, bu bir neçə halı, o cümlədən vaxt aşımı və ya ləğv siqnalını əhatə edir. Go-da kanallar üçün birbaşa switch-case yoxdur, lakin select oxşar funksiyanı yerinə yetirir.

Vaxt aşımı ilə nümunə:

func worker(done chan struct{}) {
    select {
    case result := <-someChannel:
        fmt.Println("Alınan nəticə:", result)
    case <-time.After(5 * time.Second):
        fmt.Println("Vaxt aşımı baş verdi, gorutini sonlandırır")
        return
    case <-done:
        fmt.Println("Sonlandırma siqnalı alındı")
        return
    }
}

Burada, gorutini someChannel-dən məlumat gözləyir. Əgər məlumat 5 saniyə ərzində gəlməzsə, vaxt aşımı işə düşür və gorutini sona çatdırılır. Həmçinin, done kanalı vasitəsilə siqnal göndərilərək zorla sonlandırıla bilər.

Bu yanaşma gorutinin donmasını qarşısını alır və onu təhlükəsiz şəkildə idarə etməyə imkan verir.