goroutine 顺序执行的技巧

【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) }

    推荐阅读