英文:
What is the "less than followed by dash" (<-) operator in Golang?
问题
什么是Go语言中的<-
运算符?在许多与Go相关的代码片段中看到过这个运算符,但它的含义是什么?
英文:
What is the <-
operator in go language? Have seen this in many code snippets related to Go but what is the meaning of it?
答案1
得分: 27
你已经得到了答案,但是我还是给你解释一下。
将通道(channel)看作是一个消息队列。
如果通道在左箭头(<-)操作符的右边,意味着从队列中取出一个条目。将该条目保存在一个变量中是可选的。
e <- q
如果通道在左箭头操作符的左边,意味着将一个条目加入队列。
q <- e
关于“取出”(接收)操作而不将其存储在变量中的进一步说明:它可以用于非缓冲队列来实现类似于Java中的“等待/通知”操作:一个协程被阻塞,等待从队列中取出/接收一个信号,然后另一个协程将该信号加入/发送到队列中,其中信号的内容并不重要。(或者,发送者可以被阻塞,直到接收者取出消息)
英文:
You've already got answers, but here goes.
Think of a channel as a message queue.
If the channel is on the right of the left arrow (<-) operator, it means to dequeue an entry. Saving the entry in a variable is optional
e <- q
If the channel is on the left of the left arrow operator, it means to enqueue an entry.
q <- e
Further note about "dequeue" (receive) without storing in a variable: it can be used on a non-buffered queue to implement something like a "wait/notify" operation in Java: One coroutine is blocked waiting to dequeue/receive a signal, then another coroutine enqueues/sends that signal, the content of which is unimportant. (alternately, the sender could be blocked until the receiver pulls out the message)
答案2
得分: 17
<-
在语言规范中的多个地方使用:
通道类型:
<-
运算符指定通道的方向,发送或接收。如果没有指定方向,则通道是双向的。通过转换或赋值,可以将通道限制为仅发送或仅接收。
对于通道类型的操作数 ch
,接收操作 <-ch
的值是从通道 ch
接收到的值。该值的类型是通道的元素类型。该表达式会阻塞,直到有值可用。从空通道接收会永远阻塞。从已关闭的通道接收总是成功的,立即返回元素类型的零值。
发送语句:
发送语句将一个值发送到通道。通道表达式必须是通道类型,值的类型必须可赋值给通道的元素类型。
SendStmt = Channel "<-" Expression .
Channel = Expression .
接收运算符也是 select 语句 的基本组成部分。
英文:
<-
is used in more than one place in the language specification:
>Channel types:
>
> The <-
operator specifies the channel direction, send or receive. If no direction is given, the channel is bi-directional. A channel may be constrained only to send or only to receive by conversion or assignment.
>
>Receive operator:
>
> For an operand ch
of channel type, the value of the receive operation <-ch
is the value received from the channel ch
. The type of the value is the element type of the channel. The expression blocks until a value is available. Receiving from a nil channel blocks forever. Receiving from a closed channel always succeeds, immediately returning the element type's zero value.
>
>Send statements:
>
> A send statement sends a value on a channel. The channel expression must be of channel type and the type of the value must be assignable to the channel's element type.
>
> SendStmt = Channel "<-" Expression .
> Channel = Expression .
The receive operator is also a fundamental part of the select statement
答案3
得分: 3
接收操作符
对于通道类型的操作数ch
,接收操作<-ch
的值是从通道ch
接收到的值。
它从通道接收一个值。请参阅http://golang.org/ref/spec#Receive_operator
英文:
> Receive operator
>
> For an operand ch
of channel type, the value of the receive operation
> <-ch
is the value received from the channel ch
.
It receives a value from a channel. See http://golang.org/ref/spec#Receive_operator
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论