Sobes.tech
Senior

Wat zien we op het scherm bij het starten van het programma als we de bug met wg (pointer doorgeven) corrigeren?

sobes.tech AI

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