Последовательность вывода из горутин

Строка 1 гарантированно предшествует 3, потому что main ждёт соответствующий Done. Строка 2 обычно появляется первой, но WaitGroup эту вторую горутину не учитывает.

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

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

Строка 1 гарантированно предшествует 3, потому что main ждёт соответствующий Done. Строка 2 обычно появляется первой, но WaitGroup эту вторую горутину не учитывает.

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

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

Условие

Определите, какие строки будут напечатаны и в каком порядке.

func main() {
    runtime.GOMAXPROCS(1)

    var wgCounter sync.WaitGroup

    wgCounter.Add(1)

    go func() {
        time.Sleep(time.Second * 2)
        fmt.Println("1")
        wgCounter.Done()
    }()

    go func() {
        fmt.Println("2")
    }()

    wgCounter.Wait()

    fmt.Println("3")
}

Ответ

Строка 1 гарантированно предшествует 3, потому что main ждёт соответствующий Done. Строка 2 обычно появляется первой, но WaitGroup эту вторую горутину не учитывает.

GOMAXPROCS(1) не задаёт строгий порядок запуска. В типичном выполнении будет 2, затем после паузы 1 и 3, однако вывод 2 до завершения процесса не является гарантией данного кода. Если нужно дождаться обеих горутин, добавьте обе в WaitGroup. Для фиксированной последовательности 2→1→3 требуется отдельная зависимость.

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

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

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

Подробнее