go使用协程并发并等待全部协程结束的方法

第一种,基于原生带缓存的channel

package main

import "fmt"

func main() {
	done := make(chan int, 10)
	for i := 0; i < cap(done); i++ {
		go func(j int) {
			fmt.Println("你好,世界" + fmt.Sprintf("%v", j))
			done <- 1
		}(i)
	}
	//等待N个后台线程完成
	for i := 0; i < cap(done); i++ {
		<-done
	}
}

  第二种,通过使用使用sync.WaitGroup来等待

package main

import (
	"sync"
	"fmt"
)

func main() {
	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(j int) {
			fmt.Println("你好,世界" + fmt.Sprintf("%v", j))
			wg.Done()
		}(i)
	}
	wg.Wait()
}

  

 

posted @ 2018-09-27 22:10  雪山飞猪  阅读(2468)  评论(0编辑  收藏  举报