Оба верны.Первая форма является более чистой и хорошо масштабируется, если вы собираетесь расширить свой код позже, например, если вы позже решите, что хотите запускать не 2, а 3, 4 или N процедур, код не изменится по структуре, вы просто добавите дополнительные программы.
Еще одна причина, по которой первая форма является "популярной", заключается в том, что часто после запуска "рабочих" подпрограмм можно выполнять больше действий, которые могут быть выполнены в этой подпрограмме (до вызова wg.Done()
).
Вторая форма, с другой стороны, более эффективна, так как она запускает только одну дополнительную программу.Горутины легкие, дешевые, но они не «бесплатны».Это может быть улучшено дополнительно с помощью WaitGroup
только для «отслеживания» запущенной программы, очевидно, «основной», который вызывает wg.Wait()
, не должен явно ожидать себя.И если останется только 1 процедура, вы можете использовать другие средства синхронизации вместо WaitGroup
(например, канал).
Таким образом, в основном, если производительность критична, используйте 2-й подход.