github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2013/bestpractices/concurrency2.go (about)

     1  // +build ignore,OMIT
     2  
     3  package main
     4  
     5  import (
     6  	"errors"
     7  	"fmt"
     8  	"time"
     9  )
    10  
    11  // START OMIT
    12  func do(job string) error {
    13  	fmt.Println("doing job", job)
    14  	time.Sleep(1 * time.Second)
    15  	return errors.New("something went wrong!")
    16  }
    17  
    18  func main() {
    19  	jobs := []string{"one", "two", "three"}
    20  
    21  	errc := make(chan error)
    22  	for _, job := range jobs {
    23  		go func(job string) {
    24  			errc <- do(job)
    25  		}(job)
    26  	}
    27  	for _ = range jobs {
    28  		if err := <-errc; err != nil {
    29  			fmt.Println(err)
    30  		}
    31  	}
    32  }
    33  
    34  // END OMIT