根据以下示例中的类型,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 <-
是发送操作。接收操作是一个计算结果为值的表达式,因此它仅在值有效的情况下才有效-即编译器必须已经遇到赋值操作,发送操作,函数调用等的第一部分。