Sobes.tech
Middle

Go'da kontekst nima? Nima uchun ishlatiladi? Vaqt o'tishi bilan bekor qilish qanday ishlaydi?

sobes.tech AI

AIdan javob

Go'da, context - bu paket va operatsiyalarning hayotiy davrini boshqarish, bekor qilish signallarini uzatish va goroutine'lar o'rtasida 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.