gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:59:56 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com