【goroutine 顺序执行的技巧】当关闭一个channel时,会使得这个channel变得可读。通过这个特性,可以实现一个goroutine执行顺序的技巧。
B依赖A, C依赖B
package mainimport (
"fmt"
"sync"
"time"
)var wg sync.WaitGroup//要使 A->B->C 顺序执行
func main() {
A := make(chan struct{})
B := make(chan struct{})
C := make(chan struct{})
wg.Add(3)
go func() {
defer wg.Done()
testA(A, B)
}()go func() {
defer wg.Done()
testB(B, C)
}()go func() {
defer wg.Done()
testC(C)
}()
close(A)
wg.Wait()
time.Sleep(10 * time.Second)
}func testA(A chan struct{}, B chan struct{}) {
<-A
fmt.Println(1)
close(B)
}func testB(B chan struct{}, C chan struct{}) {
<-B
fmt.Println(2)
close(C)
}func testC(C chan struct{}) {
<-C
fmt.Println(3)
}
推荐阅读
- golang 求两个数组的交集 差集 去重等方法
- golang 基本知识点
- go new() 和 make() 的区别
- 算法|LeetCode Golang Hot53-最大子数组和
- go1.18泛型的简单尝试
- Go 1.18 正式发布!
- 【第四十二期】米哈游后台golang开发面经
- golang 简单工厂模式
- golang|什么才是 TDD 的正确打开方式()