blocking.go 597 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func fibonacci(c, quit chan int) {
  6. x, y := 0, 1
  7. for {
  8. // Пишет в канал пока не поямает quit
  9. select {
  10. case c <- x:
  11. fmt.Println("write to channel")
  12. x, y = y, x+y
  13. case <-quit:
  14. fmt.Println("quit")
  15. return
  16. }
  17. }
  18. }
  19. func main() {
  20. c := make(chan int)
  21. quit := make(chan int)
  22. // пытается 10 раз считать из канала
  23. go func() {
  24. for i := 0; i < 10; i++ {
  25. fmt.Println("Want to read from channel `c`")
  26. fmt.Println(<-c)
  27. }
  28. quit <- 0
  29. }()
  30. fmt.Println("Call fibonacci")
  31. fibonacci(c, quit)
  32. }