if n == 0 {
return nil
}
+ if n == 1 {
+ for _, err := range errs {
+ if err != nil {
+ if _, ok := err.(interface {
+ Unwrap() []error
+ }); ok {
+ return err
+ }
+ }
+ }
+ }
+
e := &joinError{
errs: make([]error, 0, n),
}
}
}
}
+
+func BenchmarkJoin(b *testing.B) {
+ for _, bb := range []struct {
+ name string
+ errs []error
+ }{
+ {
+ name: "no error",
+ },
+ {
+ name: "single non-nil error",
+ errs: []error{errors.New("err")},
+ },
+ {
+ name: "multiple errors",
+ errs: []error{errors.New("err"), errors.New("newerr"), errors.New("newerr2")},
+ },
+ {
+ name: "unwrappable single error",
+ errs: []error{errors.Join(errors.New("err"))},
+ },
+ {
+ name: "nil first error",
+ errs: []error{nil, errors.New("newerr")},
+ },
+ } {
+ b.Run(bb.name, func(b *testing.B) {
+ b.ReportAllocs()
+ for i := 0; i < b.N; i++ {
+ _ = errors.Join(bb.errs...)
+ }
+ })
+ }
+}