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

Функция печатает каждое число из data, умноженное на 2, но порядок не определён. Конкретные значения нельзя назвать без входного среза.

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

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

Функция печатает каждое число из data, умноженное на 2, но порядок не определён. Конкретные значения нельзя назвать без входного среза.

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

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

Условие

Какой результат будет напечатан в консоли при выполнении следующего кода:

func ProcessData(data[]int) {
    results := make(chan int, len(data))
    
    for _, val := range data {
        go func(x int) {
            time.Sleep(1 * time.Second)
            results <- x * 2
        }(val)
    }
    
    for i := 0; i < len(data); i++ {
        fmt.Println(<-results)
    }
}

Ответ

Функция печатает каждое число из data, умноженное на 2, но порядок не определён. Конкретные значения нельзя назвать без входного среза.

Все горутины запускаются до сбора результатов и спят одновременно, поэтому для небольшого списка первая волна появляется примерно через секунду, а не через секунду на каждый элемент. Точное время не гарантируется.

Буфера хватает на все отправки; функция читает ровно len(data) значений, поэтому закрытие канала для такого протокола не обязательно. Пустой срез не даёт вывода. Для большого ввода нужны ограничение параллелизма, обработка отмены и при необходимости сохранение исходного порядка.

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

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

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

Подробнее