github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2015/go-for-java-programmers/google-parallel.go (about) 1 // +build OMIT 2 3 package main 4 5 import ( 6 "fmt" 7 "math/rand" 8 "time" 9 ) 10 11 type Result string 12 type Search func(query string) Result 13 14 var ( 15 Web = fakeSearch("web") 16 Image = fakeSearch("image") 17 Video = fakeSearch("video") 18 ) 19 20 func Google(query string) (results []Result) { 21 c := make(chan Result) 22 go func() { c <- Web(query) }() 23 go func() { c <- Image(query) }() 24 go func() { c <- Video(query) }() 25 26 for i := 0; i < 3; i++ { 27 result := <-c 28 results = append(results, result) 29 } 30 return 31 } 32 33 func fakeSearch(kind string) Search { 34 return func(query string) Result { 35 time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) 36 return Result(fmt.Sprintf("%s result for %q\n", kind, query)) 37 } 38 } 39 40 func init() { 41 rand.Seed(time.Now().UnixNano()) 42 } 43 44 func main() { 45 start := time.Now() 46 results := Google("golang") 47 elapsed := time.Since(start) 48 fmt.Println(results) 49 fmt.Println(elapsed) 50 }