Fan-out (разветвление) - один канал с задачами читается несколькими горутинами. Кто первый прочитал - тот обработал. Каждое значение из канала получает только одна горутина.
jobs := make(chan string)
for i := 0; i < 3; i++ {
go func(id int) {
for j := range jobs {
fmt.Printf("worker %d: %s\n", id, j)
}
}(i)
}
for _, j := range []string{"a", "b", "c"} { jobs <- j }
close(jobs)