根据以下示例中的类型,Go编译器似乎将执行两个完全不同的语义操作:

chanA
如果chanA是类型(chan chan
但是,如果chanA是类型(chan
是唯一了解这种类型的方法,还是有一种简单的方法来判断 channel 何时发送值与自身之间的关系?

我正在从Go Programming Book看这个示例:https://github.com/adonovan/gopl.io/blob/master/ch8/chat/chat.go

最佳答案

这很容易分辨。

chanA <- anything

无论anything是什么,都会在chanA上发送值anything
chanA <- <- chanB

正在从chanB接收值并将其发送到chanA

您在这里的第二条语句:



是你的问题。 foo <- bar始终是发送操作。 Go编译器从左到右读取,identifier <-是发送操作。

接收操作是一个计算结果为值的表达式,因此它仅在值有效的情况下才有效-即编译器必须已经遇到赋值操作,发送操作,函数调用等的第一部分。

09-25 18:08