如何在不发送任何内容的情况下检查频道是不是已满[重复]
Posted
技术标签:
【中文标题】如何在不发送任何内容的情况下检查频道是不是已满[重复]【英文标题】:How to check if channel is full without sending anything [duplicate]如何在不发送任何内容的情况下检查频道是否已满[重复] 【发布时间】:2021-10-01 09:53:33 【问题描述】:我知道我可以通过尝试发送如下内容来检查频道是否已满:
select
case ch <- "data":
// sent
default:
// channel full
但是,有没有一种方法可以在不发送任何内容的情况下检查通道是否已满?
【问题讨论】:
我想知道你为什么需要它。我不明白你为什么不把你的替代逻辑放在默认情况下。 【参考方案1】:cap(ch)
返回通道 ch
的缓冲区容量
len(ch)
返回频道ch
中当前未处理的消息数
所以要检查频道是否已满,您可以这样做:
cap(ch) == len(ch)
【讨论】:
这几乎是无用的,因为通道的主要目的是并发同步,如果有任何并发访问的可能性,结果值总是陈旧的。 我见过这样的东西用于“高水印”检查...len(ch) == cap(ch)*8/10
。所以它有时会很有用。同样严格地说,欺骗是错误的。以上是关于如何在不发送任何内容的情况下检查频道是不是已满[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何让机器人在不使用命令的情况下向特定频道中的特定公会发送消息
如何在不使用搜索的情况下查找 youtube 频道当前是不是正在直播?