goroutine_select.go 498 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func main() {
  7. ch1 := make(chan int)
  8. ch2 := make(chan int)
  9. go pump1(ch1)
  10. go pump2(ch2)
  11. go suck(ch1, ch2)
  12. time.Sleep(1e9)
  13. }
  14. func pump1(ch chan int) {
  15. for i := 0; ; i++ {
  16. ch <- i * 2
  17. }
  18. }
  19. func pump2(ch chan int) {
  20. for i := 0; ; i++ {
  21. ch <- i + 5
  22. }
  23. }
  24. func suck(ch1, ch2 chan int) {
  25. for {
  26. select {
  27. case v := <-ch1:
  28. fmt.Printf("Received on channel 1: %d\n", v)
  29. case v := <-ch2:
  30. fmt.Printf("Received on channel 2: %d\n", v)
  31. }
  32. }
  33. }