https://play.golang.org/p/kK9c71Yt9N - 这是我正在使用的代码。
我试图了解变量的词法范围X。如果我使用第:=11 行中的运算符,则X定义在外的func main会被隐藏,并且会在函数内创建一个新的作用域。如果我=在同一行中使用运算符,编译器会抱怨err未定义。
我的理解是:=操作员创建了未定义的变量,因此只err需要定义即可。但是,这种理解显然是错误的。
我可以做哪些代码更改以确保X不在 内重新定义main()?
我知道我可以执行以下操作以确保X不会在 内重新定义main():
var err error
X, err = InitX()
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法可以让我失踪?
我的理解是 := 运算符创建了未定义的变量,因此,只有 err 必须被定义。
这是意料之中的,您的解决方法没问题。在Effective Go中有详细的描述。
在
:=声明中,即使已经声明了变量 v 也可能出现,前提是:
- 此声明与 v 的现有声明在同一范围内(如果 v 已在外部范围中声明,则该声明将创建一个新变量§),
- 初始化中的相应值可分配给 v,并且
- 声明中至少有一个其他变量正在重新声明。