/
formatter.go
48 lines (39 loc) · 1.22 KB
/
formatter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package errors
import "fmt"
type ErrorPrinter interface {
error
// PrintError 输出错误信息.
// 使用 Print, Printf 输出的错误信息总是可见;
// 使用 PrintDetail, PrintDetailf 输出错误信息仅在 %+v 格式下可见.
//
// 返回的 next error 如果为 nil 代表在拼接简单消息时,仅输出本 error 而忽略 cause.
//
// 如一个 withPrefix 结构的错误实例,应在 Print 自身消息后,再返回 cause;
// 而一个 withNewMessage 结构的错误实例,在 Print 自身消息后,会返回 nil.
//
// 在 %+v 详细格式下,不管返回的 next error 是否为 nil,都会输出其 cause.
PrintError(p Printer) (next error)
}
type Printer interface {
Print(args ...any)
Printf(format string, args ...any)
PrintDetail(args ...any)
PrintDetailf(format string, args ...any)
}
type FormattableError interface {
error
fmt.Formatter
}
var _ FormattableError = (*errorFormatter)(nil)
type errorFormatter struct {
error
}
func (e *errorFormatter) Format(s fmt.State, verb rune) {
FormatError(e.error, s, verb) // 直接传包装的 error 不打印自身
}
func (e *errorFormatter) Cause() error {
return e.error
}
func (e *errorFormatter) Unwrap() error {
return e.error
}