Как дождаться вывода пяти goroutines

Используйте sync.WaitGroup: Add выполняется до запуска, каждая goroutine вызывает Done через defer, main ждёт Wait. Это гарантирует завершение, но не порядок чисел.

Короткий ответ

Что ответить на собеседовании

Используйте sync.WaitGroup: Add выполняется до запуска, каждая goroutine вызывает Done через defer, main ждёт Wait. Это гарантирует завершение, но не порядок чисел.

Подробный разбор

Ответ с пояснениями

Условие

Программа Go запускает пять goroutines, каждая печатает число, и сразу выходит из main. Как гарантировать завершение всех без time.Sleep?

Ответ

Используйте sync.WaitGroup: Add выполняется до запуска, каждая goroutine вызывает Done через defer, main ждёт Wait. Это гарантирует завершение, но не порядок чисел.

Пример:

var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
    wg.Add(1)
    go func(value int) {
        defer wg.Done()
        fmt.Println(value)
    }(i)
}
wg.Wait()

Нужны fmt и sync. Явная передача i исключает зависимость примера от исторических различий семантики переменной цикла.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее