Golang Go语言中为什么短赋值语句 := 不能在函数外使用

发布于 1周前 作者 itying888 来自 Go语言

一直不明白在 golang 中为什么会有这一条规定
Golang Go语言中为什么短赋值语句 := 不能在函数外使用

8 回复

我的理解不一定对,短赋值语句实际上是一个声明语句+一个赋值语句构成的,赋值既声明。函数体内这种情况不复杂,不涉及其它地方的调用,简单也方便。但函数外属于全局变量,如果允许短赋值声明的话,可能在单元 A 里面,声明一个 foo ,结果在单元 B 里面又声明了一个 foo ,此时两个 foo 是有歧义的,可能隐含各种可能的 bug ,所以才不允许吧。乱猜的不一定对。

更多关于Golang Go语言中为什么短赋值语句 := 不能在函数外使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


为了 gc 效率吧

感觉这个答案可以用来解决 80%的 go 语法问题…


var 还是:=两种写法在 gc 上没区别的

golang 就是土包金,,,runtime 非常好,语法非常烂。那个泛型还不如不加呢,,,简直糊弄😅

在外边使用:= 你不感觉很容易遗漏出问题吗

go 虽然有,但总感觉没有 java 中那么好用,学起来总感觉迷迷糊糊的

在Golang(Go语言)中,短赋值语句 := 被称为短变量声明,它主要用于在函数内部声明并初始化局部变量。这种语法不能在函数外使用的原因主要有以下几点:

  1. 作用域限制:= 声明的变量其作用域限定在声明它的代码块内(通常是函数内部)。在函数外部使用 := 会导致作用域无法确定,因为函数外部是全局作用域,而全局变量的声明通常使用 var 关键字。

  2. 语法一致性:Go语言设计注重简洁和一致性。全局变量的声明使用 var,这有助于代码的可读性和维护性。允许在函数外部使用 := 会破坏这种一致性。

  3. 避免混淆:在函数外部使用 := 可能会引起混淆,因为它与全局变量的声明和初始化方式不一致。使用 var 关键字可以更清晰地表明变量的全局属性。

  4. 编译时检查:Go语言的编译器在编译时会进行严格的语法检查。在函数外部使用 := 会导致编译错误,这是语言设计的一部分,用于确保代码的正确性和一致性。

综上所述,短赋值语句 := 在Golang中不能在函数外使用,主要是出于作用域限制、语法一致性、避免混淆以及编译时检查的考虑。在需要声明全局变量时,应使用 var 关键字。这种设计有助于保持Go语言代码的简洁、可读和一致。

回到顶部