Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我们需要golang中的:=符号?_Go - Fatal编程技术网

为什么我们需要golang中的:=符号?

为什么我们需要golang中的:=符号?,go,Go,我确实理解=和:=之间的区别,在golang中,我的问题是为什么我们实际上需要:=?编译器难道不能自己找出一个尚未定义的变量吗?这仅仅是为了可读性吗?因为您可以在内部作用域中隐藏外部作用域变量,例如闭包或循环;编译器不能纯粹根据变量是否存在于之前进行推断。必须显式定义变量也有助于减少PHP和JavaScript等语言中常见的缺陷,这些语言允许您只使用foo=bar,而不考虑是否定义了foo。这种松散的编译克服了常见的错误,如拼写错误,这样它们在编译时就不再被捕获,在运行时表现为奇怪的行为,这非常

我确实理解=和:=之间的区别,在golang中,我的问题是为什么我们实际上需要:=?编译器难道不能自己找出一个尚未定义的变量吗?这仅仅是为了可读性吗?

因为您可以在内部作用域中隐藏外部作用域变量,例如闭包或循环;编译器不能纯粹根据变量是否存在于之前进行推断。必须显式定义变量也有助于减少PHP和JavaScript等语言中常见的缺陷,这些语言允许您只使用foo=bar,而不考虑是否定义了foo。这种松散的编译克服了常见的错误,如拼写错误,这样它们在编译时就不再被捕获,在运行时表现为奇怪的行为,这非常非常难以跟踪和修复。

编译器在某些情况下可能会出现错误,但这会掩盖错误。强迫开发人员明确他们的意图可以提供更好的反馈线索。编译器不能在每一种情况下都做到这一点。你不知道:=或=是有意的。一般来说,为什么语言X的设计者决定做Y?问题要么有一个规范的答案,因为设计师写了一个理由——在这种情况下,它可以被谷歌找到——要么没有,在这种情况下,关于这个主题的问题变成了一堆猜测、猜测和意见。在这里,投机和观点往往是不受欢迎的,至少当后者不能得到具体的支持时。是的,虫族们,你是对的。你为什么不写下你的答案,详细说明这个例子,这样我就可以选择你的答案了?我会在func中删除并添加:以便显示结果不同。我更喜欢zerkms的评论,但因为他还没有发布答案,我会将你的答案设置为正确答案,因为它也是正确的。这是相同的答案,但演示而不是解释。这个游戏例子就是我所说的,从外部范围对变量进行阴影处理。这是一个相同的答案,确实是一个更好的答案:更多的细节我不知道是否更好,我通常更喜欢解释+示例,但没有时间。