Sobes.tech
Junior — Middle

Jak można określić, że wszystkie podrzędne goroutines zakończyły wykonanie w programie na języku Go?

sobes.tech AI

Odpowiedź od AI

W Go, aby określić zakończenie wszystkich podrzędnych gorutyn, zwykle używa się synchronizacji za pomocą typu sync.WaitGroup.

Przykład:

var wg sync.WaitGroup

wg.Add(3) // oczekujemy 3 gorutyn

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // sygnalizujemy zakończenie
        // praca gorutyny
        fmt.Println("Gorutyna", id, "zakończona")
    }(i)
}

wg.Wait() // blokuje się, dopóki wszystkie gorutyny nie wywołają Done
fmt.Println("Wszystkie gorutyny zakończone")

W ten sposób WaitGroup pozwala głównej gorutynie czekać na zakończenie wszystkich podrzędnych.