{{.Label}}: switch timeout{{.Sfx}} := z.EncBasicHandle().ChanRecvTimeout; { case timeout{{.Sfx}} == 0: // only consume available for { select { case b{{.Sfx}} := <-{{.Chan}}: {{ .Slice }} = append({{.Slice}}, b{{.Sfx}}) default: break {{.Label}} } } case timeout{{.Sfx}} > 0: // consume until timeout tt{{.Sfx}} := time.NewTimer(timeout{{.Sfx}}) for { select { case b{{.Sfx}} := <-{{.Chan}}: {{.Slice}} = append({{.Slice}}, b{{.Sfx}}) case <-tt{{.Sfx}}.C: // close(tt.C) break {{.Label}} } } default: // consume until close for b{{.Sfx}} := range {{.Chan}} { {{.Slice}} = append({{.Slice}}, b{{.Sfx}}) } }