Pipeline — цепочка стадий, каждая стадия читает из входного канала, обрабатывает, пишет в выходной. Функция-стадия: func stage(in <-chan int) <-chan int — создаёт выходной канал, запускает горутину для обработки, возвращает канал. Композиция: out := stage3(stage2(stage1(source))). Закрытие каналов каскадное — первая стадия закрывает свой out, range во второй завершается, та закрывает свой out. Элегантный паттерн Go, описанный в Go Blog "Pipelines and Cancellation".