package main
import "fmt"
func source(nums ...int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, n := range nums { out <- n }
}()
return out
}
func square(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for n := range in { out <- n * n }
}()
return out
}
func filter(in <-chan int, pred func(int) bool) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for n := range in {
if pred(n) { out <- n }
}
}()
return out
}
func main() {
nums := source(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
squared := square(nums)
big := filter(squared, func(n int) bool { return n > 20 })
for v := range big {
fmt.Println(v) // 25 36 49 64 81 100
}
}
Create a free account and build your private vault. Share publicly whenever you want.