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.
- 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)
- 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.