其实说白了就是流程控制,现在有三个 goroutine,如果控制他们顺序呢?

具体细节忘了,但好像美团面试官就是这么问的

当时没说明白,要是手写一下让面试官看下,说不定就不会挂掉了…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
"fmt"
"sync"
)

func main() {
c1 := make(chan struct{})
c2 := make(chan struct{})
group := sync.WaitGroup{}
group.Add(1)
go func() {
fmt.Println("g1")
c1 <- struct{}{}
}()

go func() {
<- c1
fmt.Println("g2")
c2 <- struct{}{}
}()

go func() {
<- c2
fmt.Println("g3")
group.Done()
}()
group.Wait()
}