Могут быть напечатаны некоторые числа от 0 до 4999 в произвольном порядке; полный набор не гарантирован, потому что main не ждёт горутины. Разделителей между числами тоже нет.
Как изменится вывод при запуске горутин внутри цикла
Могут быть напечатаны некоторые числа от 0 до 4999 в произвольном порядке; полный набор не гарантирован, потому что main не ждёт горутины. Разделителей между числами тоже нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какие числа будут напечатаны в стандартный вывод этой программы.
func main() {
limit := 5000
for idx := 0; idx < limit; idx++ {
go fmt.Print(idx)
}
}
Ответ
Могут быть напечатаны некоторые числа от 0 до 4999 в произвольном порядке; полный набор не гарантирован, потому что main не ждёт горутины. Разделителей между числами тоже нет.
Аргумент fmt.Print(idx) вычисляется при запуске go-выражения, поэтому проблемы захвата общей переменной через замыкание здесь нет. Но выполнение вызовов асинхронно, и выход main завершает процесс. Для всех чисел нужен WaitGroup; для строгого порядка — дополнительная координация или последовательная печать.