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  }