Pipeline (конвейер) - цепочка этапов обработки, где каждый этап представлен горутинами, читающими из входного канала и пишущими в выходной. Выход одного этапа соединяется со входом следующего.
func gen(nums ...int) <-chan int {
out := make(chan int)
go func() {
for _, n := range nums { out <- n }
close(out)
}()
return out
}
func sq(in <-chan int) <-chan int {
out := make(chan int)
go func() {
for n := range in { out <- n * n }
close(out)
}()
return out
}
// pipeline: out := sq(gen(2, 3, 4))