diff --git a/container/garray/garray_normal_any.go b/container/garray/garray_normal_any.go index c7900fc99..2248f3f9b 100644 --- a/container/garray/garray_normal_any.go +++ b/container/garray/garray_normal_any.go @@ -584,14 +584,8 @@ func (a *Array) Join(glue string) string { a.mu.RLock() defer a.mu.RUnlock() buffer := bytes.NewBuffer(nil) - s := "" for k, v := range a.array { - s = gconv.String(v) - if gstr.IsNumeric(s) { - buffer.WriteString(s) - } else { - buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`) - } + buffer.WriteString(gconv.String(v)) if k != len(a.array)-1 { buffer.WriteString(glue) } @@ -612,7 +606,24 @@ func (a *Array) CountValues() map[interface{}]int { // String returns current array as a string. func (a *Array) String() string { - return "[" + a.Join(",") + "]" + a.mu.RLock() + defer a.mu.RUnlock() + buffer := bytes.NewBuffer(nil) + buffer.WriteByte('[') + s := "" + for k, v := range a.array { + s = gconv.String(v) + if gstr.IsNumeric(s) { + buffer.WriteString(s) + } else { + buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`) + } + if k != len(a.array)-1 { + buffer.WriteString(",") + } + } + buffer.WriteByte(']') + return buffer.String() } // MarshalJSON implements the interface MarshalJSON for json.Marshal. diff --git a/container/garray/garray_normal_str.go b/container/garray/garray_normal_str.go index a62af3fdf..182f1ec93 100644 --- a/container/garray/garray_normal_str.go +++ b/container/garray/garray_normal_str.go @@ -592,7 +592,7 @@ func (a *StrArray) Join(glue string) string { defer a.mu.RUnlock() buffer := bytes.NewBuffer(nil) for k, v := range a.array { - buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`) + buffer.WriteString(v) if k != len(a.array)-1 { buffer.WriteString(glue) } @@ -613,7 +613,18 @@ func (a *StrArray) CountValues() map[string]int { // String returns current array as a string. func (a *StrArray) String() string { - return "[" + a.Join(",") + "]" + a.mu.RLock() + defer a.mu.RUnlock() + buffer := bytes.NewBuffer(nil) + buffer.WriteByte('[') + for k, v := range a.array { + buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`) + if k != len(a.array)-1 { + buffer.WriteString(",") + } + } + buffer.WriteByte(']') + return buffer.String() } // MarshalJSON implements the interface MarshalJSON for json.Marshal. diff --git a/container/garray/garray_sorted_any.go b/container/garray/garray_sorted_any.go index 28b22701d..6a7d85224 100644 --- a/container/garray/garray_sorted_any.go +++ b/container/garray/garray_sorted_any.go @@ -529,14 +529,8 @@ func (a *SortedArray) Join(glue string) string { a.mu.RLock() defer a.mu.RUnlock() buffer := bytes.NewBuffer(nil) - s := "" for k, v := range a.array { - s = gconv.String(v) - if gstr.IsNumeric(s) { - buffer.WriteString(s) - } else { - buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`) - } + buffer.WriteString(gconv.String(v)) if k != len(a.array)-1 { buffer.WriteString(glue) } @@ -557,7 +551,24 @@ func (a *SortedArray) CountValues() map[interface{}]int { // String returns current array as a string. func (a *SortedArray) String() string { - return "[" + a.Join(",") + "]" + a.mu.RLock() + defer a.mu.RUnlock() + buffer := bytes.NewBuffer(nil) + buffer.WriteByte('[') + s := "" + for k, v := range a.array { + s = gconv.String(v) + if gstr.IsNumeric(s) { + buffer.WriteString(s) + } else { + buffer.WriteString(`"` + gstr.QuoteMeta(s, `"\`) + `"`) + } + if k != len(a.array)-1 { + buffer.WriteString(",") + } + } + buffer.WriteByte(']') + return buffer.String() } // MarshalJSON implements the interface MarshalJSON for json.Marshal. diff --git a/container/garray/garray_sorted_str.go b/container/garray/garray_sorted_str.go index 83eda1282..a8b7ef19a 100644 --- a/container/garray/garray_sorted_str.go +++ b/container/garray/garray_sorted_str.go @@ -517,7 +517,7 @@ func (a *SortedStrArray) Join(glue string) string { defer a.mu.RUnlock() buffer := bytes.NewBuffer(nil) for k, v := range a.array { - buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`) + buffer.WriteString(v) if k != len(a.array)-1 { buffer.WriteString(glue) } @@ -538,7 +538,18 @@ func (a *SortedStrArray) CountValues() map[string]int { // String returns current array as a string. func (a *SortedStrArray) String() string { - return "[" + a.Join(",") + "]" + a.mu.RLock() + defer a.mu.RUnlock() + buffer := bytes.NewBuffer(nil) + buffer.WriteByte('[') + for k, v := range a.array { + buffer.WriteString(`"` + gstr.QuoteMeta(v, `"\`) + `"`) + if k != len(a.array)-1 { + buffer.WriteString(",") + } + } + buffer.WriteByte(']') + return buffer.String() } // MarshalJSON implements the interface MarshalJSON for json.Marshal. diff --git a/container/garray/garray_z_unit_normal_any_array_test.go b/container/garray/garray_z_unit_normal_any_array_test.go index 3f200f981..fb709e1c7 100644 --- a/container/garray/garray_z_unit_normal_any_array_test.go +++ b/container/garray/garray_z_unit_normal_any_array_test.go @@ -261,7 +261,7 @@ func TestArray_Join(t *testing.T) { gtest.Case(t, func() { a1 := []interface{}{0, 1, `"a"`, `\a`} array1 := garray.NewArrayFrom(a1) - gtest.Assert(array1.Join("."), `0.1."\"a\""."\\a"`) + gtest.Assert(array1.Join("."), `0.1."a".\a`) }) } diff --git a/container/garray/garray_z_unit_normal_str_array_test.go b/container/garray/garray_z_unit_normal_str_array_test.go index 3c1958089..c5274f264 100644 --- a/container/garray/garray_z_unit_normal_str_array_test.go +++ b/container/garray/garray_z_unit_normal_str_array_test.go @@ -248,12 +248,12 @@ func TestStrArray_Join(t *testing.T) { gtest.Case(t, func() { a1 := []string{"0", "1", "2", "3", "4", "5", "6"} array1 := garray.NewStrArrayFrom(a1) - gtest.Assert(array1.Join("."), `"0"."1"."2"."3"."4"."5"."6"`) + gtest.Assert(array1.Join("."), `0.1.2.3.4.5.6`) }) gtest.Case(t, func() { a1 := []string{"0", "1", `"a"`, `\a`} array1 := garray.NewStrArrayFrom(a1) - gtest.Assert(array1.Join("."), `"0"."1"."\"a\""."\\a"`) + gtest.Assert(array1.Join("."), `0.1."a".\a`) }) } diff --git a/container/garray/garray_z_unit_sorted_any_array_test.go b/container/garray/garray_z_unit_sorted_any_array_test.go index ae3cca226..fd2e4493b 100644 --- a/container/garray/garray_z_unit_sorted_any_array_test.go +++ b/container/garray/garray_z_unit_sorted_any_array_test.go @@ -394,14 +394,14 @@ func TestSortedArray_Join(t *testing.T) { return strings.Compare(gconv.String(v1), gconv.String(v2)) } array1 := garray.NewSortedArrayFrom(a1, func1) - gtest.Assert(array1.Join(","), `"a","c","d"`) - gtest.Assert(array1.Join("."), `"a"."c"."d"`) + gtest.Assert(array1.Join(","), `a,c,d`) + gtest.Assert(array1.Join("."), `a.c.d`) }) gtest.Case(t, func() { a1 := []interface{}{0, 1, `"a"`, `\a`} array1 := garray.NewSortedArrayFrom(a1, gutil.ComparatorString) - gtest.Assert(array1.Join("."), `"\"a\"".0.1."\\a"`) + gtest.Assert(array1.Join("."), `"a".0.1.\a`) }) } diff --git a/container/garray/garray_z_unit_sorted_str_array_test.go b/container/garray/garray_z_unit_sorted_str_array_test.go index 792a1200e..72fad5cde 100644 --- a/container/garray/garray_z_unit_sorted_str_array_test.go +++ b/container/garray/garray_z_unit_sorted_str_array_test.go @@ -290,14 +290,14 @@ func TestSortedStrArray_Join(t *testing.T) { gtest.Case(t, func() { a1 := []string{"e", "a", "d"} array1 := garray.NewSortedStrArrayFrom(a1) - gtest.Assert(array1.Join(","), `"a","d","e"`) - gtest.Assert(array1.Join("."), `"a"."d"."e"`) + gtest.Assert(array1.Join(","), `a,d,e`) + gtest.Assert(array1.Join("."), `a.d.e`) }) gtest.Case(t, func() { a1 := []string{"a", `"b"`, `\c`} array1 := garray.NewSortedStrArrayFrom(a1) - gtest.Assert(array1.Join("."), `"\"b\""."\\c"."a"`) + gtest.Assert(array1.Join("."), `"b".\c.a`) }) }