Not sure why the below does not exit after 2 seconds. It just keeps receiving integers forever.
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan int)
go emit(c)
for i := range c {
fmt.Printf("%d\n", i)
}
}
func emit(c chan int) {
defer close(c)
for i := 0; ; i++ {
select {
case <-time.After(2 * time.Second):
return;
default:
c <- i
}
}
}