package main import ( "fmt" "math/rand" "time" ) func main() { ch1 := make(chan string) ch2 := make(chan string) go func() { time.Sleep(time.Duration(rand.Intn(5)+1) * time.Second) ch1 <- "Message from channel 1" }() go func() { time.Sleep(time.Duration(rand.Intn(5)+1) * time.Second) ch2 <- "Message from channel 2" }() count := 10 var channels []chan string for i := range count { ch := make(chan string) channels = append(channels, ch) go func() { time.Sleep(time.Duration(rand.Intn(5)+1) * time.Second) ch <- fmt.Sprintln("Message from Channel %d", i) }() } fanIn := make(chan string, count) for i := range count { go func() { fanIn <- <-channels[i] }() } println("Recieved: ", <-fanIn) }