blocking.go 353 B

123456789101112131415161718192021222324252627282930
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. c := make(chan int)
  7. quit := make(chan int)
  8. go func() {
  9. for i := 0; i < 10; i++ {
  10. fmt.Println(<-c)
  11. }
  12. quit <- 0
  13. }()
  14. fibonacci(c, quit)
  15. }
  16. func fibonacci(c, quit chan int) {
  17. x, y := 0, 1
  18. for {
  19. select {
  20. case c <- x:
  21. x, y = y, x+y
  22. case <-quit:
  23. fmt.Println("quit")
  24. return
  25. }
  26. }
  27. }