wg.Done() больше раз, чем wg.Add()?Когда счётчик внутри 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.