Skip to content

Commit

Permalink
refactor(slice): simplify SliceValidationError Error method (#3910)
Browse files Browse the repository at this point in the history
* Simplify SliceValidationError Error method

* Replace fmt.Fprintf with b.WriteString

---------

Co-authored-by: huangzw <huangzw@hsmap.com>
Co-authored-by: 1911860538 <alxps1911@163.com>
  • Loading branch information
3 people committed May 13, 2024
1 parent a569ed8 commit 3f5b0af
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 20 deletions.
27 changes: 11 additions & 16 deletions binding/default_validator.go
Expand Up @@ -5,8 +5,8 @@
package binding

import (
"fmt"
"reflect"
"strconv"
"strings"
"sync"

Expand All @@ -22,25 +22,20 @@ type SliceValidationError []error

// Error concatenates all error elements in SliceValidationError into a single string separated by \n.
func (err SliceValidationError) Error() string {
n := len(err)
switch n {
case 0:
if len(err) == 0 {
return ""
default:
var b strings.Builder
if err[0] != nil {
fmt.Fprintf(&b, "[%d]: %s", 0, err[0].Error())
}
if n > 1 {
for i := 1; i < n; i++ {
if err[i] != nil {
b.WriteString("\n")
fmt.Fprintf(&b, "[%d]: %s", i, err[i].Error())
}
}

var b strings.Builder
for i := 0; i < len(err); i++ {
if err[i] != nil {
if b.Len() > 0 {
b.WriteString("\n")
}
b.WriteString("[" + strconv.Itoa(i) + "]: " + err[i].Error())
}
return b.String()
}
return b.String()
}

var _ StructValidator = (*defaultValidator)(nil)
Expand Down
12 changes: 8 additions & 4 deletions binding/default_validator_benchmark_test.go
Expand Up @@ -12,11 +12,15 @@ import (

func BenchmarkSliceValidationError(b *testing.B) {
const size int = 100
e := make(SliceValidationError, size)
for j := 0; j < size; j++ {
e[j] = errors.New(strconv.Itoa(j))
}

b.ReportAllocs()
b.ResetTimer()

for i := 0; i < b.N; i++ {
e := make(SliceValidationError, size)
for j := 0; j < size; j++ {
e[j] = errors.New(strconv.Itoa(j))
}
if len(e.Error()) == 0 {
b.Errorf("error")
}
Expand Down

0 comments on commit 3f5b0af

Please sign in to comment.