Число 1 будет выведено при выходе из main. Появление и порядок 2 и 3 не гарантированы: программа не ждёт запущенные горутины.
Какой вывод появится в консоли (задача 21)
Число 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 не устанавливает порядок их исполнения.