原文地址(歡迎互換友鏈):翻譯
http://www.niu12.com/article/8code
sync 包提供同步 goroutine 的功能文檔
<p>文檔介紹</p><code> // A WaitGroup waits for a collection of goroutines to finish. // The main goroutine calls Add to set the number of // goroutines to wait for. Then each of the goroutines // runs and calls Done when finished. At the same time, // Wait can be used to block until all goroutines have finished. // // A WaitGroup must not be copied after first use. 翻譯 一個WaitGroup等待一個goroutines集合的完成, main(goroutines)調用Add()方法設置須要等到的goroutine熟練 而後執行每個goroutine,而且完成時調用Done()方法 與此同時,Wait()方法能夠用來鎖住main(goroutines)直到全部goroutine完成 首次使用後不得複製WaitGroup</code><p>實例代碼</p><code>package mainimport ( "fmt" "sync")var wg sync.WaitGroupfunc printerOne(ch chan int) { for i := range ch{ fmt.Printf("printerOne: %v\n" , i) } // 申明當前goroutine完成 wg.Done()}func printerTwo(ch chan int) { for i := range ch{ fmt.Printf("printerTwo: %v\n" , i) } // 申明當前goroutine完成 wg.Done()}func main() { // 申明一個channel c c := make(chan int) // 申明有兩個goroutine須要執行 wg.Add(2) // 執行goroutine go printerOne(c) go printerTwo(c) // 向channel c發送數據 for i:=0; i < 10; i++ { c <- i } // 關閉channel c close(c) // 等待goroutine所有完成 wg.Wait()}</code>