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

  1. context.WithTimeout kimi, vaxt və ya timeout ilə kontekst yaradılır.
  2. Vaxt keçdikdə, kontekst avtomatik olaraq ləğv edilir.
  3. Bu konteksti dinləyən goroutine Done() kanalı vasitəsilə ləğv siqnalı alır.
  4. 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.