Go - Select & Concurrency Patterns
          Beginner 10/10
          Teacher 10/10
          Architect 10/10
        
        
        
        
select
select{
case v := <-ch1:
  fmt.Println(v)
case <-time.After(time.Second):
  fmt.Println("timeout")
}
Worker Pool
jobs := make(chan int)
wg := &sync.WaitGroup{}
for i := 0; i < 4; i++ {
  wg.Add(1)
  go func(){ defer wg.Done(); for j := range jobs { _ = j } }()
}
for j := 0; j < 10; j++ { jobs <- j }
close(jobs)
wg.Wait()