Исходник не компилируется: литерал слайса записывается как []int, а не int[]. После исправления вывод всё равно не гарантирован, потому что main не ждёт горутины.
Какой вывод получит консоль в примере №47
Исходник не компилируется: литерал слайса записывается как []int, а не int[]. После исправления вывод всё равно не гарантирован, потому что main не ждёт горутины.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что будет напечатано при запуске следующей программы:
func main() {
numbers := int[]{
1, 2, 3, 4, 5,
}
for _, index := range numbers {
go func() {
fmt.Print(index)
}()
}
}
Ответ
Исходник не компилируется: литерал слайса записывается как []int, а не int[]. После исправления вывод всё равно не гарантирован, потому что main не ждёт горутины.
При Go 1.22+ каждая итерация получает отдельное значение переменной, поэтому успевшие горутины печатают соответствующие числа 1–5 в произвольном порядке, без разделителей. При старой семантике захват общей переменной создаёт гонку. Для переносимого решения передавайте значение аргументом, добавьте WaitGroup, а для стабильного порядка — явную координацию.