Какой вывод появится в консоли (задача 21)

Число 1 будет выведено при выходе из main. Появление и порядок 2 и 3 не гарантированы: программа не ждёт запущенные горутины.

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

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

Число 1 будет выведено при выходе из main. Появление и порядок 2 и 3 не гарантированы: программа не ждёт запущенные горутины.

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

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

Условие

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

func main() {
    defer fmt.Println(1)
    time.Sleep(1 * time.Second)
    go fmt.Println(2)
    go fmt.Println(3)
}

Ответ

Число 1 будет выведено при выходе из main. Появление и порядок 2 и 3 не гарантированы: программа не ждёт запущенные горутины.

Sleep выполняется до создания обеих горутин, поэтому он никак не помогает дождаться их печати. После двух операторов go main возвращается, выполняет defer и завершает процесс.

Горутины могут успеть вывести свои значения до или во время завершения main, а могут не успеть вовсе. Чтобы гарантировать все три строки и нужный порядок, используйте WaitGroup и при необходимости каналы последовательности. Сам порядок операторов go не устанавливает порядок их исполнения.

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

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

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

Подробнее