Обработка данных из двух каналов и запись результата в третий канал - PullRequest
1 голос
/ 28 мая 2020

У меня есть решение задачи, которое компилируется и запускается, но не проходит тесты. Я только начал изучать Go язык и на данном этапе не знаю, как правильно решить проблему. Буду признателен за вашу помощь или совет. Я включил свой текущий код в сообщение.

Описание задачи.

Напишите функцию: fun c Merge2Channels (f fun c (int) int, in1 <- chan int, in2 <- chan int, out chan <- int, n int) в пакете main. </p>

Описание ее работы:

  • проделайте следующие n раз
  • прочтите по одному номеру из каждого из двух каналов in1 и in2, назовите их x1 и x2.
  • вычислить f (x1) + f (x2) записать полученное значение в out
  • Функция Merge2Channels должна быть неблокирующей, немедленно возвращая управление.
  • Функция f может работают долго, чего-то ожидая или выполняя вычисления.

Формат ввода

  • Количество итераций передается через аргумент n.
  • Целые числа передаются через аргументы канала in1 и in2.
  • Функция обработки чисел перед сложением передается через аргумент f.

Формат вывода

  • Канал для вывода результатов передается через аргумент out.

Мой текущий код:

func calc(f func(int) int, x1 int, x2 int, out chan int) {
    out <- f(x1) + f(x2)
}

func Merge2Channels(f func(int) int, in1 chan int, in2 chan int, out chan int, n int) {
  for i := 0; i < n; i++ {
      x1, x2 := <-in1, <-in2
      go calc(f, x1, x2, out)
  }
}

...