channel_block.go 382 B

12345678910111213141516171819202122232425
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. var cnt = 0
  7. func main() {
  8. ch1 := make(chan int)
  9. go pump(ch1) // pump hangs
  10. fmt.Println(<-ch1) // prints only 0
  11. time.Sleep(time.Second)
  12. fmt.Println(cnt) // prints 1
  13. }
  14. func pump(ch chan int) {
  15. for i := 0; ; i++ {
  16. ch <- i // the channel will be block due to lack of consumer
  17. cnt++ // this code will only execute once
  18. }
  19. }