// +build ignore,OMIT package main import "fmt" // prime returns true if n is a prime number. func prime(n int) bool { for i := 2; i < n; i++ { if n%i == 0 { return false } } return true } // fib returns a channel on which the first n Fibonacci numbers are written. func fib(n int) chan int { c := make(chan int) go func() { a, b := 0, 1 for i := 0; i < n; i++ { a, b = b, a+b c <- a } close(c) }() return c } // filterPrimes returns a channel of ints on which it writes all the prime // numbers read from cin, and closes the returned channel when cin is closed. func filterPrimes(cin chan int) chan int { cout := make(chan int) go func() { for v := range cin { if prime(v) { cout <- v } } close(cout) }() return cout } func main() { for p := range filterPrimes(fib(20)) { fmt.Println(p) } }