fork download
  1. package main
  2.  
  3. import (
  4. "log"
  5. "time"
  6. )
  7.  
  8. func main() {
  9. log.Println("start program")
  10. defer log.Println("end program")
  11.  
  12. closed := make(chan struct{})
  13. msg := make(chan int)
  14.  
  15. for i := 0; i < 10; i++ {
  16. go listen(closed, msg, i)
  17. }
  18.  
  19. for i := 0; i < 30; i++ {
  20. // <-time.After(time.Second)
  21. msg <- i
  22. }
  23.  
  24. close(closed)
  25.  
  26. <-time.After(5 * time.Second)
  27. }
  28.  
  29. func listen(closed chan struct{}, msg chan int, id int) {
  30. log.Println("start listen", id)
  31. defer log.Println("end listen", id)
  32.  
  33. for {
  34. select {
  35. case <-closed:
  36. return
  37. case x := <-msg:
  38. log.Println(id, "get msg!", x)
  39. }
  40. }
  41. }
  42.  
Success #stdin #stdout #stderr 0s 4528KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
2020/09/10 12:23:02 start program
2020/09/10 12:23:02 start listen 9
2020/09/10 12:23:02 9 get msg! 0
2020/09/10 12:23:02 9 get msg! 1
2020/09/10 12:23:02 9 get msg! 2
2020/09/10 12:23:02 9 get msg! 3
2020/09/10 12:23:02 9 get msg! 4
2020/09/10 12:23:02 9 get msg! 5
2020/09/10 12:23:02 9 get msg! 6
2020/09/10 12:23:02 9 get msg! 7
2020/09/10 12:23:02 9 get msg! 8
2020/09/10 12:23:02 9 get msg! 9
2020/09/10 12:23:02 9 get msg! 10
2020/09/10 12:23:02 9 get msg! 11
2020/09/10 12:23:02 9 get msg! 12
2020/09/10 12:23:02 9 get msg! 13
2020/09/10 12:23:02 9 get msg! 14
2020/09/10 12:23:02 9 get msg! 15
2020/09/10 12:23:02 9 get msg! 16
2020/09/10 12:23:02 9 get msg! 17
2020/09/10 12:23:02 9 get msg! 18
2020/09/10 12:23:02 9 get msg! 19
2020/09/10 12:23:02 9 get msg! 20
2020/09/10 12:23:02 9 get msg! 21
2020/09/10 12:23:02 9 get msg! 22
2020/09/10 12:23:02 9 get msg! 23
2020/09/10 12:23:02 9 get msg! 24
2020/09/10 12:23:02 9 get msg! 25
2020/09/10 12:23:02 9 get msg! 26
2020/09/10 12:23:02 9 get msg! 27
2020/09/10 12:23:02 9 get msg! 28
2020/09/10 12:23:02 start listen 0
2020/09/10 12:23:02 end listen 0
2020/09/10 12:23:02 start listen 1
2020/09/10 12:23:02 end listen 1
2020/09/10 12:23:02 start listen 2
2020/09/10 12:23:02 end listen 2
2020/09/10 12:23:02 start listen 3
2020/09/10 12:23:02 end listen 3
2020/09/10 12:23:02 start listen 4
2020/09/10 12:23:02 end listen 4
2020/09/10 12:23:02 start listen 5
2020/09/10 12:23:02 end listen 5
2020/09/10 12:23:02 start listen 6
2020/09/10 12:23:02 end listen 6
2020/09/10 12:23:02 start listen 7
2020/09/10 12:23:02 end listen 7
2020/09/10 12:23:02 start listen 8
2020/09/10 12:23:02 end listen 8
2020/09/10 12:23:02 9 get msg! 29
2020/09/10 12:23:02 end listen 9
2020/09/10 12:23:07 end program