首页 >后端开发 >Golang >在 Go `select` 语句中首先评估的是接收还是发送?

在 Go `select` 语句中首先评估的是接收还是发送?

Susan Sarandon
Susan Sarandon原创
2024-11-15 00:48:02673浏览

Is Receive or Send Evaluated First in a Go `select` Statement?

揭示选择语句中接收和发送操作的动态

当寻求转发通道结果时,许多人选择以下构造:

for {
    select {
        ...
        case ch2 <- (<-ch1):
        ...
    }
}

检查这段代码会提出一个问题:正在评估选择操作的哪个方面,接收或发送操作?

Go 文档阐明了这一点:

接收操作的通道操作数以及发送语句的通道和右侧表达式在输入“select”语句时按源顺序仅计算一次。

这意味着在给定的示例中,立即评估表达式

实际上,此方法可以立即阻止从 ch1 接收, select 最终控制 ch2 上的后续发送。然而,值得注意的是,即使选择了替代情况,ch1 中的值仍然会被消耗和丢弃。

以上是在 Go `select` 语句中首先评估的是接收还是发送?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn