打印报错堆栈信息
安装errors包
go get github.com/pkg/errors
具体使用
// 新生成一个错误, 带堆栈信息
func New(message string) error
//只附加新的信息
func WithMessage(err error, message string) error
//只附加调用堆栈信息
func WithStack(err error) error
//同时附加堆栈和信息
func Wrap(err error, message string) error
堆栈打印
// 功能一样,输出错误信息,不包含堆栈
%s,%v
// 输出的错误信息带引号,不包含堆栈
%q
// 输出错误信息和堆栈
%+v
如:
fmt.Println(fmt.Sprintf("%s", err))
fmt.Println(fmt.Sprintf("%q", err))
fmt.Println(fmt.Sprintf("%+v", err))
演示WithStack方法,其他省略:
// 例子
package main
import (
"fmt"
"github.com/pkg/errors"
)
func main() {
result, err := Divide(10, 0)
if err != nil {
fmt.Println(fmt.Sprintf("error1: %v", err))
fmt.Println(fmt.Sprintf("error2: %s", err))
fmt.Println(fmt.Sprintf("error3: %q", err))
fmt.Println(fmt.Sprintf("error4: %+v", err))
} else {
fmt.Println("result:", result)
}
}
func Divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.WithStack(errors.New("division can not 0"))
} else {
return a / b, nil
}
}