2 回答
TA贡献1993条经验 获得超6个赞
您正在比较两个恰好具有相同错误消息的不同值。您想比较预定义的错误值,就像使用io.EOF.
http://play.golang.org/p/II8ZeASwir
var errTest = fmt.Errorf("test error")
func do() error {
return errTest
}
func main() {
err := do()
if err == errTest {
log.Fatal("received error: ", err)
}
}
您可以阅读“错误即价值”以获得更深入的解释。
如果您需要提供有关错误的更多信息,您可以创建自己的错误类型。然后,您可以将任何您想要的信息附加到错误中,并通过类型断言检查该类型的错误。
type myError string
func (e myError) Error() string {
return string(e)
}
func do() error {
return myError("oops")
}
func main() {
err := do()
if err, ok := err.(myError); ok {
log.Fatal("received myError: ", err)
}
}
TA贡献1812条经验 获得超5个赞
使用reflect.DeepEqual比较值。
if reflect.DeepEqual(fmt.Errorf("Test Error"), fmt.Errorf("Test Error")) {
// the error values are same.
}
操场上的例子
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报
