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