Junior — Middle
Как да гарантираме завършването на всички изпълняващи се горутини в програма?
sobes.tech AI
Отговор от AI
В Go няма вградена възможност принудително да прекратите горутина отвън. За да гарантирате, че всички стартирани горутини ще завършат, обикновено се използва синхронизация с sync.WaitGroup.
Принцип на работа:
- Преди стартиране на всяка горутина се извиква
wg.Add(1). - В края на горутината се извиква
wg.Done(). - В главната функция се извиква
wg.Wait(), което блокира изпълнението, докато броячът не стане нула.
Пример:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// работа на горутината
}()
wg.Wait() // изчакайте всички горутини да завършат
По този начин програмата гарантира, че ще изчака завършването на всички горутини, преди да продължи или да приключи.