internal/errors: Use strings.Builder, improve comments
diff --git a/internal/errors/errors.go b/internal/errors/errors.go
index 445500d..c8d0145 100644
--- a/internal/errors/errors.go
+++ b/internal/errors/errors.go
@@ -50,8 +50,8 @@
func (e *wrapped) Cause() error { return e.err }
func (e *wrapped) Unwrap() error { return e.err }
-// Merge merges multiple errors into one.
-// Merge returns nil if all errors are nil.
+// Merge errors into one, nil errors are discarded
+// and returns nil if all errors are nil.
func Merge(err ...error) error {
var errs []error
for _, e := range err {
@@ -74,22 +74,25 @@
var _ wrapper = (*merged)(nil)
func (e *merged) Error() string {
- var m []string
- for _, err := range e.s {
- m = append(m, err.Error())
+ var s strings.Builder
+ for i, err := range e.s {
+ if i > 0 {
+ s.WriteString(": ")
+ }
+ s.WriteString(err.Error())
}
- return strings.Join(m, ": ")
+ return s.String()
}
// Unwrap returns only the first error, there is
// no way to create a queue of errors.
func (e *merged) Unwrap() error { return e.s[0] }
-// Cause returns only the first error, there is
+// Cause returns only the first error as there is
// no way to create a queue of errors.
func (e *merged) Cause() error { return e.s[0] }
-// Is runs errors.Is on all merged errors.
+// Is does errors.Is on all merged errors.
func (e *merged) Is(target error) bool {
if target == nil {
return nil == e.s
@@ -102,7 +105,7 @@
return false
}
-// As runs errors.As on all merged errors.
+// As does errors.As on all merged errors.
func (e *merged) As(target interface{}) bool {
for _, err := range e.s {
if As(err, target) {