据我所知,errors.Join()
是hashicorp/multierror等多错误收集类型的现成替代品,它收集并排发生的错误。此问题不解决常规错误 Package /展开。
当我替换生产代码时,一些测试在尝试计算联接错误时失败。错误的数量和类型对于管理业务案例都很重要。这对hashicorp/multierror是有效的,因为会生成一个特定的字符串,比如3 errors occurred
。
package main
import "errors"
func doSomething() error {
var multierror error
err1 := errors.New("Hello")
multierror = errors.Join(err1, err1)
err2 := errors.New("World")
multierror = errors.Join(err2, err1)
return multierror
}
// somewhere else
func test_doSomething(t *testing.T) {
actual := doSomething()
assert.Len(t, 2, len(actual)????) // help
}
使用errors.Join()
后,如何计算错误数量?
我找不到一种方法来检查连接错误中的错误切片的性质,并且检查所述错误切片本身是不可能的,因为它是私有的。
使用errors.Unwrap(err)
可能是一种方法,尽管我得到的不是一个错误,就是nil
(如果它是最后一个)。除了errors.As/.Is
之外,它并不完全让我们计数一个地址错误。
1条答案
按热度按时间bnl4lu3b1#
errors.Join()
文件说明:Join返回的非nil错误实现了Unwrap()[]错误方法。
所以
errors.Join()
返回的error
将有一个Unwrap() []error
方法。Type assert一个接口类型来保存该方法,你可以调用它,它将以切片的形式返回连接的错误:举例来说:
这将输出(在Go Playground上尝试):