Middle
Go-da kontekst nədir? Nəyə görə istifadə olunur? Vaxt aşımı ilə ləğv necə işləyir?
sobes.tech Süni İntellekt
AI-dan cavab
Go'da, context paket və əməliyyatların həyat dövrünü idarə etmək, ləğv siqnallarını ötürmək və goroutine'lar arasında vaxt limitlərini təyin etmək üçün bir konsepsiyadır.
Context-in əsas vəzifələri:
- Əməliyyatların ləğvi (məsələn, vaxt aşımı və ya istifadəçi tərəfindən ləğv ediləndə),
- Dəyərləri ötürmək (məsələn, sorğu ID-si) çağrı zənciri boyunca,
- Vaxt limitləri (timeouts) təyin etmək.
Vaxt aşımı ilə ləğv belə işləyir:
context.WithTimeoutkimi, vaxt və ya timeout ilə kontekst yaradılır.- Vaxt keçdikdə, kontekst avtomatik olaraq ləğv edilir.
- Bu konteksti dinləyən goroutine
Done()kanalı vasitəsilə ləğv siqnalı alır. - Goroutine düzgün şəkildə ləğvi idarə etməlidir (məsələn, işi dayandırmaq və resursları sərbəst buraxmaq).
Nümunə:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println(" əməliyyat tamamlandı")
case <-ctx.Done():
fmt.Println(" əməliyyat ləğv edildi və ya vaxt keçdi")
}
Burada, əməliyyat 2 saniyə sonra, əgər əvvəl tamamlanmazsa, ləğv ediləcək.