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