github.com/goplus/gop@v1.2.6/printer/_testdata/35-Chan-select/select.gop (about) 1 var done = make(chan bool, 1) 2 var exited = make(chan bool, 1) 3 4 func consume(xchg chan int) { 5 for { 6 select { 7 case c := <-xchg: 8 println(c) 9 case <-done: 10 println("done!") 11 exited <- true 12 return 13 } 14 } 15 } 16 17 func product(xchg chan int, from chan int) { 18 for x <- from { 19 xchg <- x 20 } 21 done <- true 22 } 23 24 from := make(chan int, 10) 25 xchg := make(chan int, 1) 26 go consume(xchg) 27 go product(xchg, from) 28 for i := 1; i <= 10; i++ { 29 from <- i 30 } 31 close(from) 32 <-exited