Есть код, который обрабатывает входной поток stdin и выдает на stdout.
var input io.ReadCloser
reader := bufio.NewReader(input)
for {
in, _, err := reader.ReadLine()
if err != nil && err == io.EOF {
break
}
in = append(in, []byte("\n")...)
if _, err := w.Write(in); err != nil {
log.Fatalln(err)
}
}
Хочу добавить дополнительные фильтры на входящий поток.
Фильтр будет реализовывать интерфейс с функцией
Filter(io.Reader, io.Writer) error
Как, имея массив фильтров, обработать входящий поток так, чтобы не было блокировок и в
input
находился обработанный поток после применения последнего фильтра?
То есть, по аналогии с применением pipe в командной строке.
Желательно, чтобы смог использовать типа функции
applyFilters(input io.Reader) (io.Reader, error)
. Тогда я бы смог написать
filteredInput, err = applyFilters(input)
reader := bufio.NewReader(filteredInput)
Использовать
io.Pipe
? Если да, то как?