changeset 38:05bdd37e3000

add channel-sample.
author pyon@macmini
date Sat, 11 Jan 2020 17:00:30 +0900
parents 43adde439537
children 523416ca4b83
files src/chan.go
diffstat 1 files changed, 60 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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)
+}
+