diff --git a/of.go b/of.go index 4ec9492..d14e687 100644 --- a/of.go +++ b/of.go @@ -12,19 +12,7 @@ func Of[T any](values ...T) <-chan T { // OfDelayed behaves like Of but with a pre-defined delay between each value func OfDelayed[T any](delay time.Duration, values ...T) <-chan T { - out := make(chan T, len(values)) - - go func(out chan T, values []T) { - for i, value := range values { - out <- value - if i < len(values)-1 { - time.Sleep(delay) - } - } - close(out) - }(out, values) - - return out + return OfDelayedFunc(func(value T) time.Duration { return delay }, values...) } // OfDelayedFunc behaves like OfDelayed but accepts a function to determine the delay @@ -32,13 +20,13 @@ func OfDelayedFunc[T any](delayFunc func(value T) time.Duration, values ...T) <- out := make(chan T, len(values)) go func(out chan T, values []T) { + defer close(out) for i, value := range values { out <- value if i < len(values)-1 { time.Sleep(delayFunc(value)) } } - close(out) }(out, values) return out