我通过调用以下内容从github.com/pkg/errors
中创建错误:
err = errors.New(fmt.Sprintf(...))
默认情况下,它填充有堆栈跟踪。我想创建一个error
,但只显示一条消息。
有可能吗?
答案 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