Какой вывод получит консоль в примере №47

Исходник не компилируется: литерал слайса записывается как []int, а не int[]. После исправления вывод всё равно не гарантирован, потому что main не ждёт горутины.

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

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

Исходник не компилируется: литерал слайса записывается как []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, а для стабильного порядка — явную координацию.

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

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

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

Подробнее