如何在不使用接收数据的情况下释放go通道?
我创建了一个通道,希望在不使用接收值的情况下释放它。 但是,编译器不允许我这样编写代码:如何在不使用接收数据的情况下释放go通道?,go,Go,我创建了一个通道,希望在不使用接收值的情况下释放它。 但是,编译器不允许我这样编写代码: for i := range ch { // code } 抱怨我没用 用“我”代替“我”也不管用 什么是惯用方法?您可以使用select而不是range: for { select { // read and discard case <-ch: // to avoid deadlock default:
for i := range ch {
// code
}
抱怨我没用
用“我”代替“我”也不管用
什么是惯用方法?您可以使用
select
而不是range
:
for {
select {
// read and discard
case <-ch:
// to avoid deadlock
default:
continue
}
}
用于{
挑选{
//读并丢弃
案例尝试:
输出:
done
如果您不想在通道不为空之前一直停留在无限循环中读取值:
exitLoop:
for {
select {
case <-ch:
default:
break exitLoop
}
}
exitLoop:
为了{
挑选{
您是否在循环体中尝试了\ui
?@abhink,是-循环体后的第二行文本snippet@abhink,看起来很难看,我认为应该有更好的方法。我需要频道,但在编写代码时对其进行了注释。只有在关闭频道时才有效。如果已打开(或稍后在其他位置关闭)-然后你得到deadlock@EugeneLisitsky,你完全正确。在发布了“粗略想法”后,我意识到我错过了什么,并且完全忘记了编辑代码段。只有关闭频道,这才有效。如果你已经打开(或稍后在另一个地方关闭)-然后你会遇到死锁@EugeneLisitsky:是的,尝试通道未关闭。
exitLoop:
for {
select {
case <-ch:
default:
break exitLoop
}
}