TODO: Pipelines
examples/pipeline/pipeline.go
package main import ( "fmt" "time" ) func double(in <-chan int, out chan<- int) { for { number := <-in dbl := 2 * number //secs := 100000 //rand.Intn(10) time.Sleep(10000) out <- dbl } } func big(in <-chan int, out chan<- int) { for { number, open := <-in if !open { close(out) break } if number > 100 { out <- number } } } func main() { ch1 := make(chan int) ch2 := make(chan int) //go double(ch1, ch2) go big(ch1, ch2) numbers := []int{3, 7, 11, 8, 12, 4} for _, n := range numbers { ch1 <- n res, open := <-ch2 if !open { break } fmt.Println(res) } close(ch1) fmt.Println("done") }