据我所知,errors.Join()
是对多错误收集类型(如hashicorp/MultiError)的开箱即用的替代,它收集并行发生的错误.此问题不涉及常规错误包装/展开.
当我替换生产代码时,一些测试在try 计算联接的错误时失败.错误的数量和类型对于管理业务 case 都很重要.这适用于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
之外的计数错误.