gpt4 book ai didi

Golang 返回 nil 不返回 nil

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

我创建了一个自定义错误类型来包装错误,以便在 Golang 中更轻松地进行调试。当有错误要打印时它可以工作,但现在它会引起 panic 。

Demo

type Error struct {
ErrString string
}

func (e *Error) Error() string {
return e.ErrString
}

func Wrap(err error, str string) *Error {
if err == nil {
return nil
}
e := &Error{
ErrString: str + err.Error(),
}
return e
}

当我调用一个没有返回错误的函数时,我应该仍然能够包装错误。

预期的行为是如果错误为零,它应该简单地忽略它,不幸的是它恰恰相反。

func foo() error {
err := bar()
return Wrap(err, "bar called")
}

func bar() error {
return nil
}

func main() {
err := foo()
if err != nil {
fmt.Printf("Found error %v\n",err)
return
}
fmt.Println("No Errors")
}

我希望它打印 No errors .相反,它打印 Found error <nil>即使错误为零。

最佳答案

if err != nil

正在将 err 变量与 nil error 进行比较,但它实际上是 nil *Error

将代码更改为

err:=foo()
var nilerror *Error = nil
if err != nilerror {
fmt.Printf("Found error %v\n",err)
return
}
fmt.Println("No Errors")

产生预测结果。

关于Golang 返回 nil 不返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53892508/

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