理解 golang 中的词法作用域

https://play.golang.org/p/kk9c71Yt9N - 这是我正在处理的代码。

我试图理解变量的词法范围X。如果我:=在第 11 行中使用运算符,则在隐藏X外部定义并在函数内创建一个新范围。func main如果我=在同一行中使用运算符,编译器会抱怨err未定义。

我的理解是,:=操作员创建了未定义的变量,因此只需err定义即可。但是,这种理解显然是错误的。

我可以做哪些代码更改以确保X不在其中重新定义main()

我知道我可以执行以下操作以确保X不在内部重新定义main()

var err error
X, err = InitX()

有没有更好的方法我可能会错过?


慕森王
浏览 148回答 1
1回答

呼啦一阵风

我的理解是 := 运算符创建了未定义的变量,因此,只有 err 必须被定义。这是意料之中的,您的解决方法是可以的。在Effective Go中有详细的描述。在:=声明中,即使变量 v 已经被声明,它也可能出现,前提是:此声明与 v 的现有声明在同一范围内(如果 v 已在外部范围内声明,则该声明将创建一个新变量§),初始化中的相应值可分配给 v,并且声明中至少有一个其他变量正在重新声明。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go