go语言中的<-
运算符是什么?在许多与Go相关的代码片段中都看到了这个,但是它的含义是什么?
答案 0 :(得分:12)
<-
在语言规范中的多个位置使用:
<-
运算符指定通道方向,发送或接收。如果没有给出方向,则通道是双向的。频道可能仅限于发送或仅通过转换或分配接收。对于通道类型的操作数
ch
,接收操作<-ch
的值是从通道ch
接收的值。值的类型是通道的元素类型。表达式将阻塞,直到值可用。从零通道接收永远阻止。从封闭通道接收总是成功,立即返回元素类型的零值。send语句在通道上发送值。通道表达式必须是通道类型,并且值的类型必须可分配给通道的元素类型。
SendStmt = Channel "<-" Expression .
Channel = Expression .
接收运算符也是select statement
的基本部分答案 1 :(得分:9)
你已经得到了答案,但现在就去了。
将频道视为消息队列。
如果通道位于左箭头(&lt ;-)运算符的右侧,则表示将条目出列。将条目保存在变量中是可选的
e <- q
如果频道位于左箭头操作符的左侧,则表示将条目排入队列。
q <- e
进一步注意“dequeue”(接收)而不存储在变量中:它可以在非缓冲队列上使用,以实现类似Java中的“等待/通知”操作:一个协程被阻塞等待出队/接收到一个信号,然后另一个协同程序将该信号排队/发送,其内容并不重要。 (或者,发送者可以被阻止,直到接收者拉出消息)
答案 2 :(得分:3)
对于通道类型的操作数
ch
,接收操作的值<-ch
是从频道ch
收到的值。
它从频道收到一个值。见http://golang.org/ref/spec#Receive_operator