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 }