wg.Wait
не вернется, пока не будут выполнены все рабочие программы. Когда wg.Wait
вызывается в более близкой подпрограмме, вы уже вызывали wg.Add(1)
один раз для каждой рабочей подпрограммы, поэтому wg.Wait
не вернется, пока wg.Done
не будет вызвано такое же количество раз, и это происходит, когда функция goroutine возвращает. Следовательно, более близкая программа не будет вызывать close
, пока все рабочие программы не завершат свою работу.
Как вы сказали, теоретически возможно, что счетчик wg
может достигать 0, пока он еще находится в цикле, который создает рабочих, но как только цикл завершится, счетчик будет иметь значение 0 только после завершения всех процедур. Поскольку вы не запускаете более близкую программу, пока цикл не завершится, нет опасности возврата wg.Wait
до того, как все рабочие закончат.