Неправильная работа с sync.WaitGroup:

  • Забыть вызвать wg.Done(): горутина будет «учтена» в wg.Add(1), но никогда не уйдет из расчета, и вызов wg.Wait() зависнет навсегда.
  • Вызывать wg.Done() больше раз, чем Add(): получите панику negative WaitGroup counter.
  • Динамическое число горутин: если Add() вызывается после запуска горутины, та может завершиться раньше, чем мы увеличим счетчик — опять возможен рассинхрон.

Что делать:

  • Обязательно вызывайте Add() до запуска горутины.
  • В самой горутине делайте defer wg.Done(). Тогда нет риска забыть.

References


📂 Go | Последнее изменение: 02.01.2025 11:04