Можно ли изменять Wait Group динамически

«Можно ли изменять Wait Group динамически» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно изменять WaitGroup динамически, но с осторожностью. Основные методы Add() и Done() можно вызывать в разных горутинах, но важно соблюдать баланс между ними.

Пример:

var wg sync.WaitGroup
wg.Add(1) // начальное значение

go func() {
    defer wg.Done()
    // какая-то работа
}()

// Динамически добавить ещё задачи
wg.Add(1) 
go func() {
    defer wg.Done()
    // другая работа
}()

wg.Wait() // ждём завершения всех

Важно:

  • Нельзя вызывать Add() с отрицательным числом после Wait(), иначе будет паника.
  • Done() уменьшает счётчик на 1, и если он станет отрицательным — тоже паника.
  • Лучше вызывать Add() до запуска горутин, чтобы избежать гонок.