// Written by http://xojoc.pw. Public domain. package main import ( "fmt" "time" ) func makeChan(delay time.Duration) <-chan struct{} { c := make(chan struct{}) go func() { for { time.Sleep(time.Millisecond * delay) c <- struct{}{} } }() return c } func main() { fizz := makeChan(30) buzz := makeChan(50) fizzBuzz := makeChan(150) number := makeChan(10) time.Sleep(time.Millisecond*20) for i := 1; i <= 100; i++ { select { case <-fizzBuzz: fmt.Println("FizzBuzz") <-fizz <-buzz <-number continue default: } select { case <-buzz: fmt.Println("Buzz") <-number continue default: } select { case <-fizz: fmt.Println("Fizz") <-number continue default: } select { case <- number: fmt.Println(i) } } }