| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // courtesy of: http://sdh33b.blogspot.com/2009/12/fibonacci-in-go.html
- package main
- import (
- "fmt"
- "time"
- )
- func dup3(in <-chan int) (<-chan int, <-chan int, <-chan int) {
- a, b, c := make(chan int, 2), make(chan int, 2), make(chan int, 2)
- go func() {
- for {
- x := <-in
- a <- x
- b <- x
- c <- x
- }
- }()
- return a, b, c
- }
- func fib() <-chan int {
- x := make(chan int, 2)
- a, b, out := dup3(x)
- go func() {
- x <- 0
- x <- 1
- <-a
- for {
- x <- <-a + <-b
- }
- }()
- return out
- }
- func main() {
- start := time.Now()
- x := fib()
- for i := 0; i < 10; i++ {
- fmt.Println(<-x)
- }
- end := time.Now()
- delta := end.Sub(start)
- fmt.Printf("longCalculation took this amount of time: %s\n", delta)
- }
|