Sobes.tech
Назад к вопросам
Senior
7

Что выведет программа? Почему? ```go func main() { timeStart := time.Now() _, _ = <-worker(), <-worker() println(int(time.Since(timeStart).Seconds())) } func worker() chan int { ch := make(chan int) go func() { time.Sleep(3 * time.Second) ch <- 1 }() return ch } ```

Компании, где спрашивали
Озон банк

Ответ от нейросети

sobes.tech AI

Программа выведет 3.

Объяснение:

  • Функция worker() создаёт канал ch и запускает горутину, которая засыпает на 3 секунды, затем отправляет в канал число 1.
  • В main вызывается <-worker() дважды, то есть создаются две независимые горутины, каждая из которых спит 3 секунды и отправляет значение в свой канал.
  • Оператор _, _ = <-worker(), <-worker() последовательно читает из двух каналов, но оба канала уже запущены параллельно, и обе горутины спят одновременно.
  • Таким образом, общее время ожидания — примерно 3 секунды, а не 6.

Вывод println(int(time.Since(timeStart).Seconds())) преобразует прошедшее время в секунды и выводит целое число, поэтому результат — 3.