为什么在Go中为变量赋值具有等号

时间:2015-07-10 00:35:46

标签: syntax go

我想提前说我只是开始学习并使用Go语言,而且这不是语法问题,而是语言设计问题。

在Go中,假设您的频道cint,您可以使用以下方式发送频道:

c <- 1

并从频道接收变量v,其中包含:

v = <- c

我读过一个记住语法的简单方法是“箭头”指向信息流动的方向,我认为这是诗意的,尤其是Python粉丝。我的问题是为什么不采用这种方式,因此你有对称的语法:

v <- c

为了从频道接收?为什么那里有等号?

我认为解释器最终会使用相邻的语法标记,如:

[variable][value]

可以想象地来自如下声明:

v 1 

因此,那里的等号允许您通过使通道收据评估为值来重用通常的变量赋值机制。难道让翻译接受没有等号的版本会有困难吗?基本上只需将其视为该案例的二元运算符。

它似乎还会导致其他情况,如果有两个频道c1c2您有语法:

c2 <- <- c1

为了从一个读取并将其传输到另一个。

我还想说,我不是要试图引出关于风格的意见,而是试图理解决策驱使Go成为现实。

1 个答案:

答案 0 :(得分:2)

组合两个正交算子,每个都做一件事,更具表现力。

除了@ sedat-kapanoglu提供的示例之外,请想一想如何表达以下内容:

x := <-ch
x += <-ch
x, y = <-ch1, <-ch2

此外,您的提案还有以下表达式:

y <- x

可以是来自频道x的读取,也可以是对频道y的写入,具体取决于xy类型。将其与使用现有语法的代码进行比较:

y = <-x
y <- x