我在任何地方都找不到答案,所以是这种情况:
// 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中只需要许多变量,这些变量将不会在作用域之后被删除并保留整个外部作用域。因此,我认为最好的解决方案是最好的。
但我想听听其他人如何解决这种情况...
只是在这种情况下不要使用:=并预先声明globalVar和err。
var (
globalVar string
err error
)
globalVar = "string"
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
或者,如果您想限制err的范围,请执行以下操作:
globalVar := "string"
if globalVar == "string" {
var err error
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
http://play.golang.org/p/73bF_tHYsC,该示例类似于先前的答案。
:=是为了方便您在一个语句中声明和分配。如果遇到问题,请不要使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句