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()