Sobes.tech
Junior — Middle

Go'da goroutine holatini va yakunlanishini qanday boshqarish mumkin?

sobes.tech AI

AIdan javob

Go tilida, goroutine holatini va tugatilishini odatda kanallar (channels) va kontekstlar (context) yordamida boshqarish odatiy holdir.

  1. Kanallar yordamida goroutine'lar o'rtasida signallar uzatiladi. Masalan, tugashni bildirish uchun kanal yaratish mumkin:
stop := make(chan struct{})
func() {
    for {
        select {
        case <-stop:
            return // Goroutine'ni yakunlaydi
        default:
            // Ishni bajarish
        }
    }
}()

// Goroutine'ni to'xtatish uchun:
close(stop)
  1. Kontekst paketi goroutine'larning hayot davrini boshqarish uchun qulay usul taqdim etadi, ayniqsa so'rovlar yoki uzoq davom etadigan operatsiyalar bilan ishlashda:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            return // Goroutine'ni yakunlaydi
        default:
            // Ish
        }
    }
}(ctx)

// To'xtatish uchun:
cancel()

Shu tarzda, goroutine'lar kanallar yoki kontekstlar orqali signallarni tinglaydi va signalni olgach, to'g'ri tarzda yakunlanadi.