
Génerateur
func idGenerator() chan int {
ids := make(chan int)
go func() {
id := 0
for {
ch <- id
id++
}
}
return ids
}
ids := idGenerator()
id1 := <-ids
id2 := <-ids

Timeout
select {
case n := <-ch:
fmt.Printf("Received %d", n)
case <-time.After(2 * time.Seconds)
fmr.Printf("Too late")
}

Tickers
ticker := time.NewTicker(50 * time.Millisecond)
go func() {
for t := range ticker.C {
fmt.Println("Tick at", t)
}
}()
time.Sleep(150 * time.Millisecond)
ticker.Stop()

Worker
func worker(in <-chan *Work,
out chan<- *Work) {
for w := range in {
w.z = w.x * w.y
Sleep(w.z)
out <- w
}
}

Load balancer
func Run() {
in := make(chan *Work)
out := make(chan *Work)
for i := 0; i < NumWorkers; i++ {
go worker(in, out)
}
go sendLotsOfWork(in)
receiveLotsOfResults(out)
}