diff --git a/g/container/garray/garray_int.go b/g/container/garray/garray_int.go index e2c64c3d3..d0ce128ec 100644 --- a/g/container/garray/garray_int.go +++ b/g/container/garray/garray_int.go @@ -69,6 +69,17 @@ func (a *IntArray) InsertAfter(index int, value int) { func (a *IntArray) Remove(index int) int { a.mu.Lock() defer a.mu.Unlock() + // 边界删除判断,以提高删除效率 + if index == 0 { + value := a.array[0] + a.array = a.array[1 : ] + return value + } else if index == len(a.array) - 1 { + value := a.array[index] + a.array = a.array[: index] + return value + } + // 如果非边界删除,会涉及到数组创建,那么删除的效率差一些 value := a.array[index] a.array = append(a.array[ : index], a.array[index + 1 : ]...) return value diff --git a/g/container/garray/garray_interface.go b/g/container/garray/garray_interface.go index d2f7c9e0f..25b256405 100644 --- a/g/container/garray/garray_interface.go +++ b/g/container/garray/garray_interface.go @@ -66,6 +66,8 @@ func (a *Array) InsertAfter(index int, value interface{}) { // 删除指定索引的数据项, 调用方注意判断数组边界 func (a *Array) Remove(index int) interface{} { + a.mu.Lock() + defer a.mu.Unlock() // 边界删除判断,以提高删除效率 if index == 0 { value := a.array[0] diff --git a/g/container/garray/garray_string.go b/g/container/garray/garray_string.go index c7384dd32..5f93e770c 100644 --- a/g/container/garray/garray_string.go +++ b/g/container/garray/garray_string.go @@ -68,7 +68,18 @@ func (a *StringArray) InsertAfter(index int, value string) { // 删除指定索引的数据项, 调用方注意判断数组边界 func (a *StringArray) Remove(index int) string { a.mu.Lock() - defer a.mu.RUnlock() + defer a.mu.Unlock() + // 边界删除判断,以提高删除效率 + if index == 0 { + value := a.array[0] + a.array = a.array[1 : ] + return value + } else if index == len(a.array) - 1 { + value := a.array[index] + a.array = a.array[: index] + return value + } + // 如果非边界删除,会涉及到数组创建,那么删除的效率差一些 value := a.array[index] a.array = append(a.array[ : index], a.array[index + 1 : ]...) return value