Почему wg.Add лучше вызывать до цикла, а не внутри горутины?

Ответ

Если вызвать Add(1) внутри запускаемой горутины, планировщик может выполнить Wait() до того, как Add успеет выполниться - Wait увидит 0 и не будет ждать новую горутину. Add до запуска гарантирует, что счётчик увеличен до того, как кто-то вызовет Wait.

wg.Add(len(tasks))
for _, t := range tasks { go func(t T) { defer wg.Done(); t.Do() }(t) }
wg.Wait()
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.