diff --git a/concurrency/iterator/main.go b/concurrency/iterator/main.go new file mode 100644 index 0000000..31ac7fe --- /dev/null +++ b/concurrency/iterator/main.go @@ -0,0 +1,24 @@ +package main + +import "fmt" + +// Generator func which produces data which might be computationally expensive. +func fib(n int) chan int { + c := make(chan int) + go func() { + for i, j := 0, 1; i < n; i, j = i+j, i { + c <- i + } + close(c) + }() + return c +} + +func main() { + // fib returns the fibonacci numbers lesser than 1000 + for i := range fib(1000) { + // Consumer which consumes the data produced by the generator, which further does some extra computations + v := i * i + fmt.Println(v) + } +}