go的错误处理

1.通常处理

错误需要开发者主动捕获,同时只能获取是什么错误,无法获悉调用栈(确定具体哪一行,也就是不知道那行出了错误)

_,err := func()
if err != nil {
   //错误处理
}

2.几种常见创建错误的方法

  • 1)errors.New()
    err1 := errors.New("math: square root of negative number")
  • 2)fmt.Errorf()
    err2 := fmt.Errorf("math: square root of negative number %g", x)
  • 3)自定义,实现error接口
type MyErr struct{}
func (myerr *MyErr) Error() error {
}

3.github.com/pkg/errors

  • 主要调用函数
errors.WithMessage(err,"bar failed") 只能携带原始错误信息
errors.WithStack(err)  //不携带原始错误信息,保留完整的调用栈
errors.Wrap(err,"custom message") //携带原始错误信息, 还能尽量保留完整的调用栈
  • 打印错误
fmt.Printf("data not found, %v\n", err)
fmt.Printf("%+v\n", err)

使用 %v 作为格式化参数,那么错误信息会保持一行, 其中依次包含调用栈的上下文文本。使用 %+v ,则会输出完整的调用栈详情。如果不需要增加额外上下文信息,仅附加调用栈后返回,可以使用 WithStack 方法

posted @ 2020-08-24 11:35  fanzou  阅读(342)  评论(0编辑  收藏  举报