Сначала нужно исправить опечатку объявления worker на func. После этого измеренное время будет примерно 6 секунд, а не 3: второй worker вызывается после завершения первого чтения.
Какой результат появится в консоли в примере №11
Сначала нужно исправить опечатку объявления worker на func. После этого измеренное время будет примерно 6 секунд, а не 3: второй worker вызывается после завершения первого чтения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Каким будет вывод программы после её выполнения?
fuck worker() chan int{
ch := make(chan int)
go func() {
time.Sleep(3 * time.Second)
ch <- 42
}()
return ch
}
func main() {
timeStart := time.Now()
_, _ = <- worker(), <-worker()
fmt.Println(int(time.Since(timeStart).Seconds()))
}
Ответ
Сначала нужно исправить опечатку объявления worker на func. После этого измеренное время будет примерно 6 секунд, а не 3: второй worker вызывается после завершения первого чтения.
Правая часть присваивания вычисляется слева направо. Первый worker запускается, его канал ждут три секунды; затем создаётся второй и ждут ещё три. Для параллельного ожидания сначала сохраните a, b := worker(), worker(), затем читайте оба. Из-за планирования и приведения к int точное напечатанное число не обязано всегда быть ровно 6.