golang sync.WaitGroup 用法
执行一个简单协程 package main import ( "fmt" "time" ) func main ( ) { for i := 0 ; i < 100 ; i ++ { go fmt . Println ( i ) } time . Sleep ( time . Second ) } 分析: 为什么会有sleep 呢, 主线程为了等待goroutine都运行完毕, 不得不在程序的末尾使用time.Sleep()来睡眠一段时间, 等待 其他线程充分运行 。对于简单的代码100 个for 循环可以在1秒内运行完但是实际的场景中大部分是1秒不够的, 而且大部分的时间 我们都无法预测for 循环内的代码运行时间的长短, 这个时候就不能使用time.sleep() 来完成等待操作了。 使用管道来 完成 操作 func main ( ) { c := make ( chan bool , 100 ) for i := 0 ; i < 100 ; i ++ { go func ( i int ) { fmt . Println ( i ) c <- true } ( i ) } for i := 0 ; i < 100 ; i ++ { <- c } } 通道是可以完全达到目的的 但是在这里 管道会 有些大材小用,因为它被设计出来不仅仅只是在这里用作简单的同步处理