什么是围棋语言中的<-
算子?在许多与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