github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2012/concurrency/support/google2.1.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 21 func Google(query string) (results []Result) { 22 c := make(chan Result) 23 go func() { c <- Web(query) } () 24 go func() { c <- Image(query) } () 25 go func() { c <- Video(query) } () 26 27 for i := 0; i < 3; i++ { 28 result := <-c 29 results = append(results, result) 30 } 31 return 32 } 33 34 func fakeSearch(kind string) Search { 35 return func(query string) Result { 36 time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) 37 return Result(fmt.Sprintf("%s result for %q\n", kind, query)) 38 } 39 } 40 41 func main() { 42 rand.Seed(time.Now().UnixNano()) 43 start := time.Now() 44 results := Google("golang") 45 elapsed := time.Since(start) 46 fmt.Println(results) 47 fmt.Println(elapsed) 48 } 49 50