gpt4 book ai didi

go - 在 Go 中使用 channel 执行非阻塞 select 语句的首选方法是什么

转载 作者:IT王子 更新时间:2023-10-29 02:02:47 27 4
gpt4 key购买 nike

这是我想做的一个例子

func (zoo *Zoo) feedAnimals(food Food) {
for animal := range zoo.Animals {
select {
case animal.EatChan() <- food:
default: // Do nothing
}
}
}

Animal 的 EatChan 有一个小缓冲区,有时调用 feedAnimals 的速率比某些动物消耗食物的速率更频繁。发生这种情况时,如果我在 select block 中省略 default 语句,select 语句将阻塞 for 循环,而其他饥饿的动物则不能得到他们的食物。所以我宁愿跳过吃饱的动物(即 channel 已达到其容量。)

但是,空的 default 对我来说感觉很奇怪。有一个更好的方法吗?

最佳答案

However, having an empty default feels weird to me.

不应该。

Is there a better way to do this?

没有。

你已经做得很好了。空默认值不是“什么都不做”的声明,而是“不阻止”的声明。这只是非阻塞选择如何工作的语义。

关于go - 在 Go 中使用 channel 执行非阻塞 select 语句的首选方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46184525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com