A new timer is not expensive but it is not free. You can make it
cheaper by doing something like
timer := time.NewTimer(5 * time.Second)
select {
case v := <-c1:
// do something with this value
timer.Reset(5 * time.Second)
case v := <-c2:
// do something with this value
timer.Reset(5 * time.Second)
case <-timer.C
// Nothing has happened for 5 seconds.
break
}
Ian