Go:错误变量重新分配,正确使用?

标签 go

我对在 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/

相关文章:

programming-languages - Go语言的应用领域

pointers - golang 指针上的指针作为函数参数

go - 如何将 AWS 凭证传递给我的应用程序(Golang SDK)?

go - 如何将多个变量传递给 Go HTML 模板

json - Golang API 编码问题

去建立错误 "db.GetUsers undefined (type *gorm.DB has no field or method GetUsers)"

去划分大量的数字(big.Int)

python - Golang 和 Python 执行 http 请求的方法之间的根本区别?

java - 将java中的正则表达式转换为golang。纠正我

go - 如何在 Golang 模板中打印对象,就像我们可以在 JavaScript 中完成一样