Sobes.tech
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.