gofibonacci_select.go 458 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // gofibonacci_select.go
  2. package main
  3. import "fmt"
  4. func fibonacci(c, quit chan int) {
  5. x, y := 1, 1
  6. for {
  7. select {
  8. case c <- x:
  9. x, y = y, x+y
  10. case <-quit:
  11. fmt.Println("quit")
  12. return
  13. }
  14. }
  15. }
  16. func main() {
  17. c := make(chan int)
  18. quit := make(chan int)
  19. go func() {
  20. for i := 0; i < 10; i++ {
  21. fmt.Println(<-c)
  22. }
  23. quit <- 0
  24. }()
  25. fibonacci(c, quit)
  26. }
  27. /* Output:
  28. 1
  29. 1
  30. 2
  31. 3
  32. 5
  33. 8
  34. 13
  35. 21
  36. 34
  37. 55
  38. quit
  39. */