From 317d1181ec6e71f36247f114f2d906d667bba486 Mon Sep 17 00:00:00 2001 From: huangzw Date: Fri, 29 Mar 2024 17:40:20 +0800 Subject: [PATCH 1/2] Simplify SliceValidationError Error method --- binding/default_validator.go | 23 +++++++-------------- binding/default_validator_benchmark_test.go | 12 +++++++---- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/binding/default_validator.go b/binding/default_validator.go index ac43d7cc5e..de5c49f748 100644 --- a/binding/default_validator.go +++ b/binding/default_validator.go @@ -22,25 +22,16 @@ 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: - 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 := range err { + if err[i] != nil { + if b.Len() > 0 { + b.WriteString("\n") } + fmt.Fprintf(&b, "[%d]: %s", i, err[i].Error()) } - return b.String() } + return b.String() } var _ StructValidator = (*defaultValidator)(nil) diff --git a/binding/default_validator_benchmark_test.go b/binding/default_validator_benchmark_test.go index 9292e2aaf1..44547412c1 100644 --- a/binding/default_validator_benchmark_test.go +++ b/binding/default_validator_benchmark_test.go @@ -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") } From 345707e85ec91ac823b75cde694387c06e06c13c Mon Sep 17 00:00:00 2001 From: 1911860538 Date: Thu, 4 Apr 2024 11:12:57 +0800 Subject: [PATCH 2/2] Replace fmt.Fprintf with b.WriteString --- binding/default_validator.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/binding/default_validator.go b/binding/default_validator.go index de5c49f748..44b7a2ac2a 100644 --- a/binding/default_validator.go +++ b/binding/default_validator.go @@ -5,8 +5,8 @@ package binding import ( - "fmt" "reflect" + "strconv" "strings" "sync" @@ -22,13 +22,17 @@ type SliceValidationError []error // Error concatenates all error elements in SliceValidationError into a single string separated by \n. func (err SliceValidationError) Error() string { + if len(err) == 0 { + return "" + } + var b strings.Builder - for i := range err { + for i := 0; i < len(err); i++ { if err[i] != nil { if b.Len() > 0 { b.WriteString("\n") } - fmt.Fprintf(&b, "[%d]: %s", i, err[i].Error()) + b.WriteString("[" + strconv.Itoa(i) + "]: " + err[i].Error()) } } return b.String()