34

<-go语言中的运算符是什么?在许多与 Go 相关的代码片段中都看到了这一点,但它的含义是什么?

4

3 回答 3

22

你已经得到了答案,但是这里有。

将通道视为消息队列。

如果通道在左箭头 (<-) 运算符的右侧,则表示将条目出列。将条目保存在变量中是可选的

e <- q

如果通道在左箭头运算符的左侧,则表示将条目入队。

q <- e

关于“出队”(接收)而不存储在变量中的进一步说明:它可以用于非缓冲队列以在 Java 中实现类似“等待/通知”操作:一个协程被阻塞等待出队/接收信号,然后另一个协程排队/发送该信号,其内容并不重要。(或者,发送者可能会被阻止,直到接收者拉出消息)

于 2013-04-13T01:50:36.183 回答
17

<-在语言规范中不止一处使用:

渠道类型

<-操作员指定通道方向,发送或接收。如果没有给出方向,则通道是双向的。通道可能被限制为仅发送或仅通过转换或分配接收。

接收运营商

对于ch通道类型的操作数,接收操作<-ch的值是从通道接收到的值ch。值的类型是通道的元素类型。表达式阻塞,直到有值可用。从零通道接收永远阻塞。从关闭的通道接收总是成功,立即返回元素类型的零值。

发送声明

发送语句在通道上发送一个值。通道表达式必须是通道类型,并且值的类型必须可分配给通道的元素类型。

SendStmt = Channel "<-" Expression .
Channel  = Expression .

接收运算符也是select 语句的基本部分

于 2013-04-10T13:26:48.027 回答
3

接收算子

对于ch通道类型的操作数,接收操作 <-ch的值是从通道接收到的值ch

它从通道接收一个值。见http://golang.org/ref/spec#Receive_operator

于 2013-04-10T13:10:03.060 回答