Неправильная работа с 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