Ste*_*ose 13 scope declaration go
我无法在任何地方找到答案,所以情况如下:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar, err := doSomethingWithString()
if err != nil {
// error handling
}
}
Run Code Online (Sandbox Code Playgroud)
当使用'='时,第二个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
}
Run Code Online (Sandbox Code Playgroud)
要么
globalVar := "string"
var err error
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
Run Code Online (Sandbox Code Playgroud)
我是否必须使用其中一种解决方法,或者是否有正确的方法来实现我的需求?
第二个解决方案看起来最简单,但是如果在if-scope中只需要很多变量,那么这些变量将不会在作用域之后被删除并持久化整个外部作用域.所以在我看来,第一个解决方案似乎是最好的.
但我想听听别人如何解决这种情况......
Kam*_*iel 14
只是不要使用:=在这种情况下,预先声明globalVar和err.
var (
globalVar string
err error
)
globalVar = "string"
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想限制错误的范围:
globalVar := "string"
if globalVar == "string" {
var err error
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/73bF_tHYsC示例与上一个答案类似.
:=当你想在一个语句中声明和赋值时,这意味着方便.如果它妨碍了,就不要使用它.