打印报错堆栈信息
安装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 mainimport ("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}
}