refactor(slice): simplify SliceValidationError Error method (#3910)
* Simplify SliceValidationError Error method * Replace fmt.Fprintf with b.WriteString --------- Co-authored-by: huangzw <huangzw@hsmap.com> Co-authored-by: 1911860538 <alxps1911@163.com>
This commit is contained in:
		@ -5,8 +5,8 @@
 | 
			
		||||
package binding
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
@ -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())
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return b.String()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ StructValidator = (*defaultValidator)(nil)
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user