go语言中“少于跟随破折号”的运算符是什么?

时间:2013-04-10 13:05:48

标签: go

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

3 个答案:

答案 0 :(得分:12)

<-在语言规范中的多个位置使用:

  

Channel types

     

<-运算符指定通道方向,发送或接收。如果没有给出方向,则通道是双向的。频道可能仅限于发送或仅通过转换或分配接收。

     

Receive operator

     

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

     

Send statements

     

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

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

接收运算符也是select statement

的基本部分

答案 1 :(得分:9)

你已经得到了答案,但现在就去了。

将频道视为消息队列。

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

e <- q

如果频道位于左箭头操作符的左侧,则表示将条目排入队列。

q <- e

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

答案 2 :(得分:3)

  

Receive operator

     

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

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