| // +build ignore,OMIT |
| |
| package main |
| |
| import ( |
| "fmt" |
| "math/rand" |
| "time" |
| ) |
| |
| func main() { |
| // START1 OMIT |
| quit := make(chan bool) // HL |
| c := boring("Joe", quit) |
| for i := rand.Intn(10); i >= 0; i-- { fmt.Println(<-c) } |
| quit <- true // HL |
| // STOP1 OMIT |
| } |
| |
| func boring(msg string, quit <-chan bool) <-chan string { |
| c := make(chan string) |
| go func() { // HL |
| for i := 0; ; i++ { |
| time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond) |
| // START2 OMIT |
| select { |
| case c <- fmt.Sprintf("%s: %d", msg, i): |
| // do nothing |
| case <-quit: // HL |
| return |
| } |
| // STOP2 OMIT |
| } |
| }() |
| return c |
| } |