# HG changeset patch # User pyon@macmini # Date 1578729630 -32400 # Node ID 05bdd37e3000f02125b4ec78005b1751e00e1d26 # Parent 43adde439537b9651fdcba0d3166c817a3584aff add channel-sample. diff -r 43adde439537 -r 05bdd37e3000 src/chan.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/chan.go Sat Jan 11 17:00:30 2020 +0900 @@ -0,0 +1,60 @@ +package main + +import ( + "fmt" + "time" +) + +func main() { + fmt.Println("- Channel Test with Fibonacci -") + var t time.Time + n, nfib := 0, 0 + + n, t = 25, time.Now() + nfib = fib(n) + fmt.Printf("n=%d nfib=%d [%v]\n", n, nfib, time.Since(t)) + + n, t = 45, time.Now() + nfib = fib(n) + fmt.Printf("n=%d nfib=%d [%v]\n", n, nfib, time.Since(t)) + + fmt.Println() + fmt.Println("- Channel Test with Fibonacci #2 -") + ch1 := make(chan int) + ch2 := make(chan int) + + n, t = 45, time.Now() + go func(n int) { + nfib := fib(n) + fmt.Printf("goroutine: n=%d nfib=%d [%v]\n", n, nfib, time.Since(t)) + ch1 <- nfib + }(n) + + n, t = 25, time.Now() + go func(n int) { + nfib := fib(n) + fmt.Printf("goroutine: n=%d nfib=%d [%v]\n", n, nfib, time.Since(t)) + ch2 <- nfib + }(n) + + n, t = 35, time.Now() + nfib = fib(n) + fmt.Printf(" - : n=%d nfib=%d [%v]\n", n, nfib, time.Since(t)) + + <- ch1 + <- ch2 + + n, t = 5, time.Now() + nfib = fib(n) + fmt.Printf(" - : n=%d nfib=%d [%v]\n", n, nfib, time.Since(t)) + + fmt.Println("- End -") +} + +func fib(x int) int { + if x < 2 { + return x + } + return fib(x - 1) + fib(x - 2) +} +