On Mon, Apr 3, 2023 at 8:14 PM Rob Pike <r...@golang.org> wrote: > select { > case <-ticker.C: > case <-pauseC: > <-pauseC > }
This one is more interesting. You can't combine the ticker.C and the pauseC into a single heterogenous channel because you want to wait for the second pause event (a resumption) without dropping or buffering arbitrarily many other ticker events. I take the general point that sometimes you're waiting on only a subset of incoming events. For this particular code, though, I think you could structure it a different way. Instead of two channels with (ticker) events and (pause, resume) events, you could have two channels with heterogenous (ticker, pause) events and (resume) events. Yes, the `time.NewTicker` API equivalent would have to be passed a channel instead of returning a channel. The `case ' ': pauseC <- 1` code would have to alternate which channel it sent on. But we could eliminate the select. To be clear, it's not that the code is better / simpler / cleaner if we eliminate selects. It's that, outside of Go, if we don't have selects, what becomes unworkably complicated enough that it's worth implementing selects. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOeFMNVZcoj8kp%3DDeaVqs55FiNcJrbPGPAUuLOLj0gUWqCRJKg%40mail.gmail.com.