用通道来等待主goroutine

用通道来等待主goroutine

Content #

Go语言中为了让主goroutine等待其他goroutine结束,最简单粗暴的办法就是让主 goroutine“小睡”一会儿:

for i := 0; i < 10; i++ {
  go func() {
    fmt.Println(i)
  }()
}
time.Sleep(time.Millisecond * 500)

但等待的时间很难确定。更好的做法是用通道来解决,请写出该解决方案。

func main() {
        num := 10
        sign := make(chan struct{}, num)
        for i := 0; i < num; i++ {
                go func() {
                        fmt.Println(i)
                        sign <- struct{}{}
                }()
        }
        for j := 0; j < num; j++ {
                <-sign
        }
}

Viewpoint #

From #