Senior
Какво ще видим на екрана при стартиране на програмата, ако поправим бъга с wg (предаване на указател)?
sobes.tech AI
Отговор от 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 дождался завершения всех горутин.