github.com/yukk001/go1.10.8@v0.0.0-20190813125351-6df2d3982e20/src/sync/example_test.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package sync_test 6 7 import ( 8 "fmt" 9 "sync" 10 ) 11 12 type httpPkg struct{} 13 14 func (httpPkg) Get(url string) {} 15 16 var http httpPkg 17 18 // This example fetches several URLs concurrently, 19 // using a WaitGroup to block until all the fetches are complete. 20 func ExampleWaitGroup() { 21 var wg sync.WaitGroup 22 var urls = []string{ 23 "http://www.golang.org/", 24 "http://www.google.com/", 25 "http://www.somestupidname.com/", 26 } 27 for _, url := range urls { 28 // Increment the WaitGroup counter. 29 wg.Add(1) 30 // Launch a goroutine to fetch the URL. 31 go func(url string) { 32 // Decrement the counter when the goroutine completes. 33 defer wg.Done() 34 // Fetch the URL. 35 http.Get(url) 36 }(url) 37 } 38 // Wait for all HTTP fetches to complete. 39 wg.Wait() 40 } 41 42 func ExampleOnce() { 43 var once sync.Once 44 onceBody := func() { 45 fmt.Println("Only once") 46 } 47 done := make(chan bool) 48 for i := 0; i < 10; i++ { 49 go func() { 50 once.Do(onceBody) 51 done <- true 52 }() 53 } 54 for i := 0; i < 10; i++ { 55 <-done 56 } 57 // Output: 58 // Only once 59 }