diff --git a/container/garray/garray_normal_any.go b/container/garray/garray_normal_any.go index 0ce08bdaa54..a1521070135 100644 --- a/container/garray/garray_normal_any.go +++ b/container/garray/garray_normal_any.go @@ -764,8 +764,6 @@ func (a *Array) String() string { // MarshalJSON implements the interface MarshalJSON for json.Marshal. // Note that do not use pointer as its receiver here. func (a Array) MarshalJSON() ([]byte, error) { - a.mu.RLock() - defer a.mu.RUnlock() return json.Marshal(a.array) } diff --git a/container/garray/garray_z_unit_normal_any_test.go b/container/garray/garray_z_unit_normal_any_test.go index 5cce7794981..3dc46c624d2 100644 --- a/container/garray/garray_z_unit_normal_any_test.go +++ b/container/garray/garray_z_unit_normal_any_test.go @@ -850,3 +850,25 @@ func TestArray_Walk(t *testing.T) { }), g.Slice{"key-1", "key-2"}) }) } + +func TestArray_MarshalJSON(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + array := garray.NewArrayFrom([]interface{}{1, 2, 3}, true) + + go func() { + time.Sleep(1 * time.Second) + array.Append(4) + }() + + // MarshalJSON code here, just replace: + //func (a Array) MarshalJSON() ([]byte, error) { + // fmt.Println(fmt.Sprintf("before=%+v", a.array)) + // time.Sleep(2 * time.Second) + // fmt.Println(fmt.Sprintf("after=%+v", a.array)) + // return json.Marshal(a.array) + //} + data, err := array.MarshalJSON() + t.AssertNil(err) + t.Assert(data, []byte(`[1,2,3]`)) + }) +}