Files
h/merge-channel/main.go

39 lines
532 B
Go

package mergechannel
import (
"errors"
"sync"
)
var ErrInsufficientChannels = errors.New("channels count must be >2")
func merge[T any](channels ...<-chan T) (<-chan T, error) {
out := make(chan T)
if len(channels) < 2 {
close(out)
return out, ErrInsufficientChannels
}
var wg sync.WaitGroup
wg.Add(len(channels))
for _, c := range channels {
go func(channel <-chan T) {
defer wg.Done()
for v := range channel {
out <- v
}
}(c)
}
go func() {
wg.Wait()
close(out)
}()
return out, nil
}