这是我想要做的一个例子
func (zoo *Zoo) feedAnimals(food Food) {
for animal := range zoo.Animals {
select {
case animal.EatChan() <- food:
default: // Do nothing
}
}
}
动物的EatChan
有一个小的缓冲区,有时候feedAnimals
被调用的频率比一些动物可以食用的速度更频繁。当发生这种情况时,如果我在default
块中省略select
语句,则select语句将阻止for loop
,其他饥饿的动物无法获取食物。所以我宁愿跳过已满的动物(即通道达到其容量。)
但是,空default
让我觉得很奇怪。有一个更好的方法吗?
答案 0 :(得分:2)
然而,对我来说,一个空的默认感觉很奇怪。
不应该。
有更好的方法吗?
没有
您已经正确地完成了这项工作。空的默认值不是&#34;什么都不做&#34;声明,它不会阻止&#34;阻止&#34;声明。这只是非阻塞选择如何工作的语义。