https://github.com/kevchn/go-concurrency-patterns/blob/9493f7e9f5db056eae29c2faa231ea54c5514545/1-8-timeout-select.go#L29 ``` func generator(msg string) <-chan string { // returns receive-only channel ch := make(chan string) go func() { // anonymous goroutine for i := 0; ; i++ { ch <- fmt.Sprintf("%s %d", msg, i) time.Sleep(time.Second) } }() return ch } ```