1 回答
TA贡献1993条经验 获得超5个赞
使用默认方法时,来自的错误pkg/errors不会打印堆栈,而是使用打印它。String()"%+v"
这在文档的格式化打印错误部分中进行了解释:
从这个包返回的所有错误值都实现了 fmt.Formatter 并且可以被 fmt 包格式化。支持以下动词:
%s print the error. If the error has a Cause it will be
printed recursively.
%v see %s
%+v extended format. Each Frame of the error's StackTrace will
be printed in detail.
WithStack的文档有显示不同行为的示例:
cause := errors.New("whoops")
err := errors.WithStack(cause)
fmt.Println(err)
// Output:
// whoops
fmt.Printf("%+v", err)
// Output:
// whoops
// github.com/pkg/errors_test.ExampleWithStack_printf
// /home/fabstu/go/src/github.com/pkg/errors/example_test.go:55
// testing.runExample
// ...
请注意,如果您直接使用errors.New,则不需要使用WithStack,errors.New已经为您完成了,如本操场示例所示:
package main
import (
"fmt"
"github.com/pkg/errors"
)
func main() {
err := errors.New("whoops")
fmt.Printf("String: %s\n", err)
fmt.Printf("Verbose: %+v\n", err)
}
输出:
String: whoops
Verbose: whoops
main.main
/tmp/sandbox878560423/prog.go:10
runtime.main
/usr/local/go-faketime/src/runtime/proc.go:204
runtime.goexit
/usr/local/go-faketime/src/runtime/asm_amd64.s:1374
- 1 回答
- 0 关注
- 179 浏览
添加回答
举报