Syntax 为什么在Go中给变量赋值有一个等号

Syntax 为什么在Go中给变量赋值有一个等号,syntax,go,Syntax,Go,我想说的是,我只是开始学习和使用Go语言,而且这不是一个语法问题,而是一个语言设计问题 在Go中,假设您有一个c频道int,您可以使用以下方式在该频道上发送: c <- 1 我读到一个简单的语法记忆方法是“箭头”指向信息流动的方向,我认为这很有诗意,尤其是作为Python迷。我的问题是,为什么不一直这么做,所以你有对称语法: v <- c 这可能来自以下陈述: v 1 因此那里的等号允许您通过使通道接收评估为一个值来重用通常的变量分配机制。如果没有等号,让译员接受这个版本会有

我想说的是,我只是开始学习和使用Go语言,而且这不是一个语法问题,而是一个语言设计问题

在Go中,假设您有一个
c
频道
int
,您可以使用以下方式在该频道上发送:

c <- 1
我读到一个简单的语法记忆方法是“箭头”指向信息流动的方向,我认为这很有诗意,尤其是作为Python迷。我的问题是,为什么不一直这么做,所以你有对称语法:

v <- c
这可能来自以下陈述:

v 1 
因此那里的等号允许您通过使通道接收评估为一个值来重用通常的变量分配机制。如果没有等号,让译员接受这个版本会有那么困难吗?在这种情况下,它基本上只需将其视为二进制运算符

这似乎还导致了其他情况,即如果有两个通道
c1
c2
,则语法如下:

c2 <- <- c1

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

除了@statt kapanoglu提供的示例外,请思考如何表达以下内容:

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

我试图建议表达式
y
c2 <- <- c1
x := <-ch
x += <-ch
x, y = <-ch1, <-ch2
y <- x
y = <-x
y <- x