示例代码
func main() {
	res := make(chan int, 3)
	for i := 0; i < 3; i++ {
		go func(num int) {
			res <- num
		}(i)
	}
	for v := range res {
		fmt.Println(v)
	}
	defer close(res)
	fmt.Println("main end")
}
示例代码会输出
0
1
2
fatal error: all goroutines are asleep - deadlock!  //线程睡死了。。
//希望得到输出
0
1
2
main end  //主线程输出
这个问题怎么解决,刚学习 channel goroutines 组合使用
自己搞定了
func main() {
	res := make(chan int, 3)
	var wg sync.WaitGroup
	for i := 0; i < 3; i++ {
		wg.Add(1)
		go func(n int) {
			defer wg.Done()
			res <- n
		}(i)
	}
	wg.Wait()
	close(res)
	for v := range res{
		fmt.Println(v)
	}
	fmt.Println("main is end")
}
|  |      1yiplee      2020-04-28 10:19:38 +08:00 deadlock 的原因是 ```golang for v := range res { fmt.Println(v) } ``` 这里在一直消费 res,消费了三次之后消费完了就一直等待了,程序卡死在这。 |