Sobes.tech
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() // изчакайте всички горутини да завършат

По този начин програмата гарантира, че ще изчака завършването на всички горутини, преди да продължи или да приключи.