Fan-out: одна горутина раздаёт работу нескольким воркерам (один канал читают много горутин или раздаём по каналам). Fan-in: несколько источников сливают данные в один канал (например, через select по нескольким каналам в один).
// fan-in: merge ch1, ch2 -> out
go func() { for v := range ch1 { out <- v } }()
go func() { for v := range ch2 { out <- v } }()