go等待N个线程完成操作总结


第一种,基于原生带缓存的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()
}

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM