| // +build OMIT |
| |
| package main |
| |
| import "fmt" |
| |
| // gen sends the values in nums on the returned channel, then closes it. |
| func gen(nums ...int) <-chan int { |
| out := make(chan int) |
| go func() { |
| for _, n := range nums { |
| out <- n |
| } |
| close(out) |
| }() |
| return out |
| } |
| |
| // sq receives values from in, squares them, and sends them on the returned |
| // channel, until in is closed. Then sq closes the returned channel. |
| func sq(in <-chan int) <-chan int { |
| out := make(chan int) |
| go func() { |
| for n := range in { |
| out <- n * n |
| } |
| close(out) |
| }() |
| return out |
| } |
| |
| func main() { |
| // Set up the pipeline and consume the output. |
| for n := range sq(sq(gen(2, 3))) { |
| fmt.Println(n) // 16 then 81 |
| } |
| } |