package channel func Filter[T any](source <-chan T, filter func(T) bool) <-chan T { out := make(chan T, cap(source)) go func() { defer close(out) for value := range source { if filter(value) { out <- value } } }() return out }