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

sea*_*rse 20 go

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

zzz*_*zzz 13

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

渠道类型:

<-操作者指定的信道的方向,发送或接收.如果没有给出方向,则通道是双向的.频道可能仅限于发送或仅通过转换或分配来接收.

接收运营商:

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

发送声明:

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

SendStmt = Channel "<-" Expression .
Channel  = Expression .
Run Code Online (Sandbox Code Playgroud)

receive运算符也是select语句的基本部分


Rob*_*rog 10

你已经得到了答案,但是这里有.

将通道视为消息队列.

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

e <- q
Run Code Online (Sandbox Code Playgroud)

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

q <- e
Run Code Online (Sandbox Code Playgroud)

它可以在非缓冲的队列被用来实现类似Java中的"等待/通知"操作:约"出列"(接收),而不在变量存储还值得注意的一个协程被阻塞,等待出列/接收的信号然后另一个协程将这个信号排队/发送,其内容并不重要.(或者,发送者可能被阻止,直到接收者拉出消息)