我对在 Go 中为错误重新分配 err
变量感到困惑。
例如,我倾向于这样做:
err1 := Something()
checkErr(err1)
str, err2 := SomethingElse()
checkErr(err2)
err3 := SomethingAgain()
checkErr(err3)
但我总是忘记这一点,并且有数百万个我不需要的无用错误变量 float ,这使代码变得困惑和困惑。
但是如果我这样做:
err := Something()
checkErr(err)
str, err := SomethingElse()
checkErr(err)
err := SomethingAgain()
checkErr(err)
...它生气并说 err
已分配。
但是如果我这样做:
var err error
err = Something()
checkErr(err)
str, err = SomethingElse()
checkErr(err)
err = SomethingAgain()
checkErr(err)
...它不起作用,因为 str
需要分配 :=
我错过了什么吗?
最佳答案
你快到了...在 :=
的左侧,至少需要一个新创建的变量。但是如果你没有提前声明 err
,编译器会尝试在 :=
的每个实例上创建它,这就是你得到第一个错误的原因。所以这会起作用,例如:
package main
import "fmt"
func foo() (string, error) {
return "Bar", nil
}
func main() {
var err error
s1, err := foo()
s2, err := foo()
fmt.Println(s1,s2,err)
}
或者在你的情况下:
//we declare it first
var err error
//this is a normal assignment
err = Something()
checkErr(err)
// here, the compiler knows that only str is a newly declared variable
str, err := SomethingElse()
checkErr(err)
// and again...
err = SomethingAgain()
checkErr(err)
关于Go:错误变量重新分配,正确使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24981794/