## Домашнее задание №6 «Пайплайн» Необходимо реализовать функцию для запуска конкуррентного пайплайна, состоящего из стейджей. Стейдж - функция, принимающая канал на чтение и отдающая канал на чтение, а внутри в горутине выполняющая полезную работу: ```golang func Stage(in <-chan interface{}) (out <-chan interface{}) { out = make(<-chan interface{}) go func() { /* Some work */ }() return out } ``` Особенность пайплайна в том, что обработка последующего элемента входных данных должна происходить **без ожидания завершения всего пайплайна** для текущего элемента. Т.е. пайплан из 4 функций по 100 мс каждая для 5 входных элементов **должен выполняться гораздо быстрее**, чем за 2 секунды (4 * 100 мс * 5). Также **должна быть реализована возможность остановить пайплайн** через дополнительный сигнальный канал (`done`/`terminate`/etc.). При необходимости можно выделять дополнительные функции. **Нельзя менять сигнатуры исходных функций.** Для большего понимания см. тесты. ### Критерии оценки - CI-пайплайн зелёный - 5 баллов - Добавлены новые юнит-тесты - до 2 баллов - Понятность и чистота кода - до 3 баллов #### Зачёт от 7 баллов ### Подсказки - https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables - `go test -v -race -count=100 .`