Home | History | Annotate | Download | only in sync
      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 }
     60