## 一、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、中間件原理