Sobes.tech
Middle

რა არის კონტექსტი Go-ში? რა მიზნით გამოიყენება? როგორ მუშაობს დროის გასვლის დროს გაუქმება?

sobes.tech AI

პასუხი AI-სგან

Go'da, context — bu paket va operatsiyalarning hayot davrini boshqarish, bekor qilish signallarini uzatish va goroutinlar orasida vaqt chegaralarini belgilash uchun tushuncha.

Contextning asosiy vazifalari:

  • Operatsiyalarni bekor qilish (masalan, timeout yoki foydalanuvchi tomonidan bekor qilishda),
  • Qiymatlarni uzatish (masalan, so'rov ID'si) chaqiriqlar zanjiri bo'ylab,
  • Vaqt chegaralarini (timeoutlar) o'rnatish.

Timeout bilan bekor qilish quyidagicha ishlaydi:

  1. Vaqt yoki timeout bilan kontekst yaratiladi, masalan, context.WithTimeout.
  2. Vaqt o'tgach, kontekst avtomatik ravishda bekor qilinadi.
  3. Bu kontekstni tinglaydigan goroutine Done() kanali orqali bekor qilish signalini oladi.
  4. Goroutine, bekor qilishni to'g'ri boshqarishi kerak (masalan, ishni to'xtatish va resurslarni bo'shatish).

Misol:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("operatsiya yakunlandi")
case <-ctx.Done():
    fmt.Println("operatsiya bekor qilindi yoki vaqt o'tdi")
}

Bu yerda, operatsiya 2 sekunddan so'ng, agar avval yakunlanmasa, bekor qilinadi.