原文地址(欢迎互换友链):翻译
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>