Guest User

Untitled

a guest
Jul 17th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.58 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "errors"
  5. "fmt"
  6. "sync"
  7. "time"
  8. )
  9.  
  10. func main() {
  11. done := make(chan bool)
  12. errChan := make(chan error)
  13. wg := new(sync.WaitGroup)
  14. for i := 0; i < 5; i++ {
  15. wg.Add(1)
  16. go Sl(wg, i, errChan)
  17. }
  18.  
  19. go func(w *sync.WaitGroup, d chan bool) {
  20. w.Wait()
  21. d <- true
  22. }(wg, done)
  23.  
  24. select {
  25. case <-done:
  26. case err := <-errChan:
  27. fmt.Println(err)
  28.  
  29. }
  30. }
  31.  
  32. func Sl(wg *sync.WaitGroup, i int, errChan chan error) {
  33. time.Sleep(5 * time.Second)
  34. fmt.Println("See: ", i)
  35. if i == 3 { // spits error then the process stops
  36. errChan <- errors.New("Some error")
  37. }
  38. wg.Done()
  39. }
Add Comment
Please, Sign In to add comment