merge-channel: init

This commit is contained in:
2024-02-15 19:02:01 +03:00
parent 9ed5a2f85a
commit 562e6633b3
5 changed files with 148 additions and 0 deletions

38
merge-channel/main.go Normal file
View File

@ -0,0 +1,38 @@
package main
import (
"errors"
"sync"
)
var InsufficientChannelsErr = 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, InsufficientChannelsErr
}
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
}