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,并且
声明中至少有一个其他变量正在重新声明。
- 1 回答
- 0 关注
- 147 浏览
添加回答
举报
0/150
提交
取消