Junior — Middle
Jak zagwarantować zakończenie wszystkich uruchomionych gorutyn w programie?
sobes.tech AI
Odpowiedź od AI
W Go nie ma wbudowanego sposobu wymuszonego zakończenia goroutine z zewnątrz. Aby zagwarantować, że wszystkie uruchomione goroutine zostaną zakończone, zwykle używa się synchronizacji za pomocą sync.WaitGroup.
Zasada działania:
- Przed uruchomieniem każdej goroutine wywołuje się
wg.Add(1). - Na końcu goroutine wywołuje się
wg.Done(). - W głównej funkcji wywołuje się
wg.Wait(), które blokuje wykonanie do momentu, gdy licznik nie osiągnie zera.
Przykład:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// praca goroutine
}()
wg.Wait() // oczekiwanie na zakończenie wszystkich goroutine
W ten sposób program gwarantuje, że poczeka na zakończenie wszystkich goroutine, zanim kontynuować lub zakończyć działanie.