为了能让子Goroutine执行完毕之后,主程序在结束,我们可以给利用sync.WaitGroup方法,这样就主程序就不会提前结束了。
package main import ( "fmt" "sync" ) var wg sync.WaitGroup // 创建同步等待组对象 func main() { /* WaitGroup:同步等待组 可以使用Add(),设置等待组中要 执行的子goroutine的数量, 启动子 goroutine, 在main 函数中,使用wait(),让主程序处于等待状态。 直到等待组中子程序执行完毕。解除阻塞 子gorotuine对应的函数中。wg.Done(),用于让等待组中的子程序的数量减1 */ //设置等待组中,要执行的goroutine的数量 wg.Add(1) go fun5() go fun6() fmt.Println("main进入阻塞状态。。。等待wg中的子goroutine结束。。") wg.Wait() //表示main goroutine进入等待,意味着阻塞 fmt.Println("main,解除阻塞。。") } func fun5() { for i:=1;i<=1000;i++{ fmt.Println("fun5.。。i:",i) } wg.Done() //给wg等待中的执行的goroutine数量减1.同Add(-1) } func fun6() { defer wg.Done() for j:=1;j<=1000;j++{ fmt.Println("\tfun6..j,",j) } }