我正在尝试处理特定的错误,但我对这种行为感到惊讶。
示例:
如果我使用
if err == errors.New("something"){}`
即使true
为err
,也会返回nil
。
如果我使用
if err.String() == "something"`
err
为nil
时会发生恐慌。
我真的期待
err == errors.New("something")`
工作,我不知道为什么它会返回true
。
更多代码:
以下是一些澄清问题的代码(Play):
package main
import "fmt"
import "errors"
func main() {
e := errors.New("error")
//I'm expecting this to return true
if e == errors.New("error") {
fmt.Println("Hello, playground")
}
}
答案 0 :(得分:6)
你能做什么:
err.Error()
:if err != nil && err.Error() == "something"
以下是第二个解决方案的示例:
package my_package
var ErrSmth = errors.New("something")
func f() error {
return ErrSmth
}
package main
import "my_package"
func main() {
err := f()
if err == my_package.ErrSmth {
// Do something
}
}
第二个解决方案是使用io
包处理特定错误的方式。