多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## WaitGroup `WaitGroup`用于等待一批 Go 协程执行结束。程序控制会一直阻塞,直到这些协程全部执行完毕 Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: | 方法名 | 功能 | | --- | --- | | (wg \* WaitGroup) Add(delta int) | 计数器+delta | | (wg \*WaitGroup) Done() | 计数器-1 | | (wg \*WaitGroup) Wait() | 阻塞直到计数器变为0 | *注意:传递`WaitGroup`需要传递指针,如果没有传递 WaitGroup 的地址,那么每个Go协程将会得到一个WaitGroup值的拷贝,当它们执行结束时主协程将不会知道子协程已处理完成* ~~~go func worker(wg *sync.WaitGroup) ~~~ 示例: ~~~ func TestLockConcurrent(t *testing.T){ var wt sync.WaitGroup var lock sync.Mutex counter := 0 for i := 0; i < 5000; i++ { wt.Add(1) go func() { defer func() { lock.Unlock() wt.Done() }() lock.Lock() counter += 1; }() } wt.Wait() //time.Sleep(1* time.Second) fmt.Println("counter:", counter) } ~~~