gpt4 book ai didi

syntax - 为什么在 Go 中分配给变量有等号

转载 作者:IT王子 更新时间:2023-10-29 01:42:36 26 4
gpt4 key购买 nike

我想先声明一下,我才刚刚开始学习和使用 Go 语言,而且这不是一个语法问题,而是一个语言设计问题。

在 Go 中,假设您有 int 的 channel c,您可以使用以下方式在 channel 上发送:

c <- 1

然后从 channel 接收到变量 v 中:

v = <- c

我读到,记住语法的一种简单方法是“箭头”指向信息流动的方向,我认为这很有诗意,尤其是作为 Python 的忠实粉丝。我的问题是为什么没有完全采用这种方式,所以你有对称语法:

v <- c

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

我想解释器最终会得到相邻的语法标记,例如:

[variable][value]

这可能来自这样的陈述:

v 1 

因此那里的等号允许您通过使该 channel 接收评估为一个值来重用通常的变量分配机制。但是,让解释器接受没有等号的版本会不会很困难?对于这种情况,它基本上只需要将其视为二元运算符。

这似乎也会导致其他情况,如果有两个 channel c1c2 你有语法:

c2 <- <- c1

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


我还想说,我并不是要征求关于风格的意见,而是试图了解促使 Go 成为现在这个样子的决定。

最佳答案

将两个正交运算符组合在一起,每个运算符都做一件事会更具表现力。

除了@sedat-kapanoglu 提供的例子之外,想想你会如何表达以下内容:

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

还有你的提议,下面的表达:

y <- x

可以是从 channel x 读取或写入 channel y 取决于类型 xy。将其与使用现有语法的代码进行比较:

y = <-x
y <- x

关于syntax - 为什么在 Go 中分配给变量有等号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31330610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com