Sobes.tech
Senior

O que veremos na tela ao iniciar o programa se corrigirmos o bug com wg (passar o ponteiro)?

sobes.tech IA

Resposta da IA

Если исправить баг с sync.WaitGroup, передавать указатель на wg вместо копии, то программа корректно дождётся завершения всех горутин перед выходом.

Без передачи указателя каждая горутина работает с копией WaitGroup, и вызовы Done() не уменьшают счётчик в оригинальном wg. В итоге main может завершиться раньше, чем горутины.

После исправления на экране мы увидим ожидаемый вывод всех горутин, например:

var wg sync.WaitGroup
wg.Add(2)

go func(wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Println("Горутина 1 завершена")
}(&wg)

go func(wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Println("Горутина 2 завершена")
}(&wg)

wg.Wait()
fmt.Println("Все горутины завершены")

Вывод будет:

Горутина 1 завершена
Горутина 2 завершена
Все горутины завершены

Это означает, что main дождался завершения всех горутин.