chaining.go 464 B

1234567891011121314151617181920212223
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. )
  6. var ngoroutine = flag.Int("n", 100000, "how many goroutines")
  7. func f(left, right chan int) { left <- 1 + <-right }
  8. func main() {
  9. flag.Parse()
  10. leftmost := make(chan int)
  11. var left, right chan int = nil, leftmost
  12. for i := 0; i < *ngoroutine; i++ {
  13. left, right = right, make(chan int)
  14. go f(left, right)
  15. }
  16. right <- 0 // bang!
  17. x := <-leftmost // wait for completion
  18. fmt.Println(x) // 100000, ongeveer 1,5 s
  19. }