特定错误处理时的行为不明确

时间:2014-07-30 15:25:49

标签: go

我正在尝试处理特定的错误,但我对这种行为感到惊讶。

示例:

如果我使用

if err == errors.New("something"){}` 

即使trueerr,也会返回nil

如果我使用

if err.String() == "something"` 

errnil时会发生恐慌。

我真的期待

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")
    }
}

1 个答案:

答案 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包处理特定错误的方式。