Функция печатает каждое число из data, умноженное на 2, но порядок не определён. Конкретные значения нельзя назвать без входного среза.
Какой вывод получит консоль после запуска программы №42
Функция печатает каждое число из 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) значений, поэтому закрытие канала для такого протокола не обязательно. Пустой срез не даёт вывода. Для большого ввода нужны ограничение параллелизма, обработка отмены и при необходимости сохранение исходного порядка.