我在任何地方都找不到答案,所以情况如下:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar, err := doSomethingWithString()
if err != nil {
// error handling
}
}
第二个声明在当时和使用“=”时globalVar
都会出错::=
:=
它说因为globalVar declared and not used
现在 globalVar 是内部范围内的一个新变量。- 用
=
它说undefined err
是因为它还没有被宣布。
所以基本上,应该有一种方法来定义声明左侧的每个变量之间=
的差异。:=
我看到了两种可能的解决方案,在我看来它们都同样丑陋:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar2, err := doSomethingWithString()
if err != nil {
// error handling
}
globalVar = globalVar2
}
或者
globalVar := "string"
var err error
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
我是否必须使用其中一种解决方法,或者是否有正确的方法来实现我的需要?
第二种方案看起来最不难看,但是如果有很多变量只需要在 if-scope 中,这些变量不会在作用域之后被移除,并且会保留整个外部作用域。所以我认为第一个解决方案似乎是最好的。
但我想听听其他人如何解决这种情况......