如何在没有堆栈跟踪的情况下创建新错误?

时间:2020-09-14 09:15:42

标签: go error-handling

我通过调用以下内容从github.com/pkg/errors中创建错误:

err = errors.New(fmt.Sprintf(...))

默认情况下,它填充有堆栈跟踪。我想创建一个error,但只显示一条消息。

有可能吗?

2 个答案:

答案 0 :(得分:5)

您正在使用github.com/pkg/errors软件包,该软件包做了一些整洁的事情,例如添加堆栈跟踪。

但这是一个外部程序包。标准库中的errors软件包不包含堆栈跟踪。

您可以按以下方式使用它:

import "errors"

err := errors.New("my error message")

或者使用格式,请使用fmt包:

import "fmt"

err := fmt.Errorf("I have %d bugs", 10)

答案 1 :(得分:1)

github.com/pkg/errors将始终存储您的错误堆栈跟踪信息,但是您可以自由选择要显示的格式:

err := errors.New("test")
fmt.Printf("%v", err)  // show only message
fmt.Printf("%+v", err) // show message with full stack info

此lib推动了fmt.Formatter界面来更改输出行为:

func (f *fundamental) Format(s fmt.State, verb rune) {
    switch verb {
    case 'v':
        if s.Flag('+') {
            io.WriteString(s, f.msg)
            f.stack.Format(s, verb)
            return
        }
        fallthrough
    case 's':
        io.WriteString(s, f.msg)
    case 'q':
        fmt.Fprintf(s, "%q", f.msg)
    }
}

这是完整的源代码:https://github.com/pkg/errors/blob/master/errors.go

相关问题