Sobes.tech
Back to questions
Senior
3

Если исправить баг с wg (передать указатель) — что мы увидим на экране при запуске программы?

Companies where asked
Базис

Answer from AI

sobes.tech AI

Если исправить баг с 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 дождался завершения всех горутин.