| > Use `reflect.Value.Select` Never really a good idea, and never necessary. > create a single channel owned by the reader Channels cannot be effectively owned by their reader(s), the contortions you have to bend the code into to make that work never really make sense. That's just a constraint of the type, but it's hardly a problem -- it makes the thing easier to model. So this isn't really an option on the table. > a Merge function Yes! The answer. And goroutine per channel is kind of the point of using them! Nothing inefficient about it. > a function that takes two channels . . . Now there's some inefficiency! ;) No reason to do this, given Merge. -- > None of these options are particularly intuitive. The merge option seems perfectly intuitive to me, assuming you understand channels have to be owned by a singular writer. |