## 一、Go主协程如何等其余协程完再操作?
Go提供了更简单的方法——使用`sync.WaitGroup`。`WaitGroup`,就是用来等待一组操作完成的。`WaitGroup`内部实现了一个计数器,用来记录未完成的操作个数.
它提供了三个方法,`Add()`用来添加计数。`Done()`用来在操作结束时调用,使计数减一。`Wait()`用来等待所有的操作结束,即计数变为0,该函数会在计数不为0时等待,在计数为0时立即返回。
应用示例:
~~~
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(2) // 因为有两个动作,所以增加2个计数
go func() {
fmt.Println("Goroutine 1")
wg.Done() // 操作完成,减少一个计数
}()
go func() {
fmt.Println("Goroutine 2")
wg.Done() // 操作完成,减少一个计数
}()
wg.Wait() // 等待,直到计数为0
}
~~~
执行结果:
```
Goroutine 2
Goroutine 1
```
- 一、经典(一)
- 二、经典(二)
- 三、经典(三)
- 四、经典(四)
- 五、经典(五)
- 六、经典(六)
- 七、经典(七)
- 八、经典(八)
- 九、经典(九)
- 十、经典(十)
- 十一、经典(十一)
- 十二、经典(十二)
- 其他
- 1、知识点一
- 2、面试集
- 3、负载均衡原理
- 4、LVS相关了解
- 5、微服务架构
- 6、分布式锁实现原理
- 7、Etcd怎么实现分布式锁
- 8、Redis的数据结构有哪些,以及实现场景
- 9、Mysql高可用方案有哪些
- 10、Go语言的栈空间管理是怎么样的
- 11、Goroutine和Channel的作用分别是什么
- 12、Go中的锁有哪些?三种锁,读写锁,互斥锁,还有map的安全的锁?
- 13、怎么限制Goroutine的数量
- 14、Goroutine和线程的区别?
- 15、中间件原理