为什么在 Go 中分配给变量有等号
Why does assigning to a variable in Go have an equal sign
我想先声明一下,我才刚刚开始学习和使用 Go 语言,而且这不是一个语法问题,而是一个语言设计问题。
在 Go 中,假设您有 int
的频道 c
,您可以使用以下频道发送:
c <- 1
并从通道接收到变量 v
中:
v = <- c
我读到一个简单的语法记忆方法是 "arrow" 指向信息流动的方向,我认为这很有诗意,尤其是 Python扇子。我的问题是为什么这没有完全采用,所以你有对称语法:
v <- c
为了从频道接收?为什么那里有等号?
我想解释器最终会得到相邻的语法标记,例如:
[variable][value]
这可能来自这样的陈述:
v 1
因此那里的等号允许您通过使该通道接收评估为一个值来重用通常的变量分配机制。但是,让解释器接受没有等号的版本会不会很困难?对于这种情况,它基本上只需要将其视为二元运算符。
这似乎还会导致其他情况,如果有两个通道 c1
和 c2
,则语法为:
c2 <- <- c1
为了从一个读取并将其传输到另一个。
我还想说的是,我并不是要征求关于风格的意见,而是试图了解促使 Go 成为现在这个样子的决定。
组合两个正交运算符,每个运算符做一件事,表现力更强。
除了@sedat-kapanoglu提供的例子之外,想想你会如何表达以下内容:
x := <-ch
x += <-ch
x, y = <-ch1, <-ch2
还有你的建议如下表达:
y <- x
可能是从通道 x
读取或写入通道 y
,具体取决于类型 x
和 y
。将其与使用现有语法的代码进行比较:
y = <-x
y <- x
我想先声明一下,我才刚刚开始学习和使用 Go 语言,而且这不是一个语法问题,而是一个语言设计问题。
在 Go 中,假设您有 int
的频道 c
,您可以使用以下频道发送:
c <- 1
并从通道接收到变量 v
中:
v = <- c
我读到一个简单的语法记忆方法是 "arrow" 指向信息流动的方向,我认为这很有诗意,尤其是 Python扇子。我的问题是为什么这没有完全采用,所以你有对称语法:
v <- c
为了从频道接收?为什么那里有等号?
我想解释器最终会得到相邻的语法标记,例如:
[variable][value]
这可能来自这样的陈述:
v 1
因此那里的等号允许您通过使该通道接收评估为一个值来重用通常的变量分配机制。但是,让解释器接受没有等号的版本会不会很困难?对于这种情况,它基本上只需要将其视为二元运算符。
这似乎还会导致其他情况,如果有两个通道 c1
和 c2
,则语法为:
c2 <- <- c1
为了从一个读取并将其传输到另一个。
我还想说的是,我并不是要征求关于风格的意见,而是试图了解促使 Go 成为现在这个样子的决定。
组合两个正交运算符,每个运算符做一件事,表现力更强。
除了@sedat-kapanoglu提供的例子之外,想想你会如何表达以下内容:
x := <-ch
x += <-ch
x, y = <-ch1, <-ch2
还有你的建议如下表达:
y <- x
可能是从通道 x
读取或写入通道 y
,具体取决于类型 x
和 y
。将其与使用现有语法的代码进行比较:
y = <-x
y <- x