为了账号安全,请及时绑定邮箱和手机立即绑定

理解 golang 中的词法作用域

理解 golang 中的词法作用域

Go
慕森王 2022-01-17 18:11:56
https://play.golang.org/p/kk9c71Yt9N - 这是我正在处理的代码。我试图理解变量的词法范围X。如果我:=在第 11 行中使用运算符,则在隐藏X外部定义并在函数内创建一个新范围。func main如果我=在同一行中使用运算符,编译器会抱怨err未定义。我的理解是,:=操作员创建了未定义的变量,因此只需err定义即可。但是,这种理解显然是错误的。我可以做哪些代码更改以确保X不在其中重新定义main()?我知道我可以执行以下操作以确保X不在内部重新定义main():var err error X, err = InitX()有没有更好的方法我可能会错过?
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我的理解是 := 运算符创建了未定义的变量,因此,只有 err 必须被定义。

这是意料之中的,您的解决方法是可以的。在Effective Go中有详细的描述。

:=声明中,即使变量 v 已经被声明,它也可能出现,前提是:

  • 此声明与 v 的现有声明在同一范围内(如果 v 已在外部范围内声明,则该声明将创建一个新变量§),

  • 初始化中的相应值可分配给 v,并且

  • 声明中至少有一个其他变量正在重新声明。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信