Golang返回nil不返回nil
我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。
演示版
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
}
当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。
预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。
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>
即使错误为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 的全部内容, 来源链接: utcz.com/qa/424357.html