戈朗的"less than followed by dash" (<-) 运算符是什么?



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

你已经有了答案,现在开始。

把通道看作一个消息队列。

如果通道位于左箭头(<-)操作符的右侧,则表示将条目从队列中取出。将条目保存在变量中是可选的

e <- q

如果通道位于左箭头操作符的左侧,则表示对条目进行排队。

q <- e

关于不存储在变量中的"dequeue"(接收)的进一步注意:它可以在非缓冲队列上使用,以实现Java中的"wait/notify"操作:一个协程被阻塞等待去队列/接收信号,然后另一个协程排队/发送该信号,其内容不重要。(或者,发送方可以被阻塞,直到接收方拔出消息)

<-在语言规范中不止一个地方使用:

通道类型:

<-操作符指定通道方向、发送或接收。如果没有给出方向,则通道是双向的。通道可以通过转换或赋值限制只能发送或只能接收。

收到接线员:

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

发送语句:

send语句在通道上发送一个值。channel表达式必须为channel类型,且值的类型必须可赋值给该channel的元素类型。

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

接收操作符也是select语句

的基本部分。

接收操作符

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

从通道接收一个值。看到http://golang.org/ref/spec Receive_operator

最新更新