🔴 Сложный · 3 очк. Пакет sync
Что произойдёт при вызове wg.Done() больше раз, чем wg.Add()?
A Лишние Done игнорируются
B panic: negative WaitGroup counter
C Deadlock
D Wait вернётся немедленно
Объяснение вопроса

Когда счётчик внутри WaitGroup станет отрицательным, произойдёт паника. Нужно вызывать Add(n) до запуска горутин и ровно n раз Done().

Правильный паттерн

wg.Add(2)
go func() {
    defer wg.Done()
    work1()
}()
go func() {
    defer wg.Done()
    work2()
}()
wg.Wait()

defer wg.Done() в начале горутины гарантирует один вызов на горутину даже при раннем return или panic.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.