对于以下的方法
func A(){若main方法执行A后不被kill掉,这个方法会不会生成8个挂起不释放的goroutine啊?要是会应该怎么解决呢?
ch:=make(chan error)
for i:=0;i<10;i++{
go func(){
ch<-errors,New("www")
}()
}
for{
select{
case err:=<-ch:
return
}
}
}
有疑问加站长微信联系(非本文作者)

对于以下的方法
func A(){若main方法执行A后不被kill掉,这个方法会不会生成8个挂起不释放的goroutine啊?要是会应该怎么解决呢?
ch:=make(chan error)
for i:=0;i<10;i++{
go func(){
ch<-errors,New("www")
}()
}
for{
select{
case err:=<-ch:
return
}
}
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
应该会产生9个挂起的goroutine,发送了10个,只接收了一个,不明白8个是怎么算出来的。
最简单的解决方法是设置chan的长度:
比较复杂的方法涉及到对发送的数据计数: