dongnao2048 2014-07-30 15:25
浏览 17
已采纳

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

I'm trying to handle specific errors but I'm surprised about the behavior.

Examples:

If I use

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

it returns true, even if err is nil.

If I use

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

it panics when err is nil.

I really expected

err == errors.New("something")` 

to work and I'm not sure why it returns true.

Some more code:

Here is some code to clarify the question (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条回答 默认 最新

  • duanran3115 2014-07-30 15:35
    关注

    What you can do:

    • compare err.Error(): if err != nil && err.Error() == "something"
    • use global variables for your errors

    Here is an example for the second solution:

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

    The second solution is the way specific errors are handled with the io package.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?