From 317d1181ec6e71f36247f114f2d906d667bba486 Mon Sep 17 00:00:00 2001 From: huangzw Date: Fri, 29 Mar 2024 17:40:20 +0800 Subject: [PATCH] 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") }