推荐几个golang常用的错误处理包

header.png

我们在写代码的时候,经常遇到需要手动处理异常,一般都是使用error.New 或者 fmt.Errorf 进行错误输出。这些内置的函数只是简单打印出堆栈中的信息,还不能满足我们的需求,比如稍微复杂一点的应用想跟踪错误的上下文,或者当前正在打开输入输出流时,怎样正确处理f.Close()?

由于errors 就是普通的值,所以这些比较复杂的情况都可以通过代码的手段来处理。下面给大家推荐几个比较热门的错误处理包类库。

github.com/hashicorp/go-multierror

go-multierror.svgbadge.svggo-multierror (1).svglicense-MPL 2-blue.svg

用于将错误列表表示为单个错误,使用multierror.Append将错误列表收集到一个错误值中。这个列表可以被提取出来,用于处理WrappedErrors,或者使用默认的或自定义样式进行格式化。ErrorOrNil可以让您返回一个多错误,如果没有错误,则返回nil。


github.com/jjeffery/errors

go-multierror.svgbadge.svggo-multierror (1).svglicense-MIT-blue.svg

可以很方便将错误信息进行日志结构化,像github.com/pkg/errors包一样,你可以使用errors.Newerrors.Wrap 捕获错误上下文和堆栈。通过使用errors.With可以捕获键/值对,然后获取错误值并将其传递给你的结构化日志包。


github.com/pkg/errors

go-multierror.svgbadge (1).svggo-multierror (1).svglicense-BSD-blue.svg

使用errors.New 和 errors.Wrap 可以获取错误的文件名和行号,Wrap允许在创建的时候添加当前运行环境的上下文消息。使用errors.Cause可以获取导致异常产生的错误信息。并且支持使用%+v等字符串格式的方式初始化错误信息

0条评论