如何在不使用接收数据的情况下释放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
    }
}