当敞开一个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)}