diff --git a/TODO b/TODO index b13e0064a..b2852e81d 100644 --- a/TODO +++ b/TODO @@ -20,7 +20,7 @@ ghttp.Server增加Ip访问控制功能(DenyIps&AllowIps); ghttp路由功能增加分组路由特性; 解决glog串日志情况; ghttp增加返回数据压缩机制; - +*any模糊匹配路由改进支持不带名字的*路由规则; DONE: 1. gconv完善针对不同类型的判断,例如:尽量减少sprintf("%v", xxx)来执行string类型的转换; diff --git a/g/container/garray/garray_int.go b/g/container/garray/garray_int.go index 0f97340d5..7384c3844 100644 --- a/g/container/garray/garray_int.go +++ b/g/container/garray/garray_int.go @@ -62,8 +62,8 @@ func (a *IntArray) Remove(index int) { // 追加数据项 func (a *IntArray) Append(value int) { a.mu.Lock() - defer a.mu.Unlock() a.array = append(a.array, value) + a.mu.Unlock() } // 数组长度 @@ -85,12 +85,12 @@ func (a *IntArray) Slice() []int { // 清空数据数组 func (a *IntArray) Clear() { a.mu.Lock() - defer a.mu.Unlock() if a.cap > 0 { a.array = make([]int, a.size, a.cap) } else { a.array = make([]int, a.size) } + a.mu.Unlock() } // 查找指定数值的索引位置,返回索引位置,如果查找不到则返回-1 diff --git a/g/container/garray/garray_interface.go b/g/container/garray/garray_interface.go index a74be51f4..bb3166362 100644 --- a/g/container/garray/garray_interface.go +++ b/g/container/garray/garray_interface.go @@ -92,16 +92,34 @@ func (a *Array) Clear() { a.mu.Unlock() } +// 查找指定数值的索引位置,返回索引位置,如果查找不到则返回-1 +func (a *Array) Search(value interface{}) int { + if len(a.array) == 0 { + return -1 + } + a.mu.RLock() + result := -1 + for index, v := range a.array { + if v == value { + result = index + break + } + } + a.mu.RUnlock() + + return result +} + // 使用自定义方法执行加锁修改操作 func (a *Array) LockFunc(f func(array []interface{})) { a.mu.Lock() + defer a.mu.Unlock() f(a.array) - a.mu.Unlock() } // 使用自定义方法执行加锁读取操作 func (a *Array) RLockFunc(f func(array []interface{})) { a.mu.RLock() + defer a.mu.RUnlock() f(a.array) - a.mu.RUnlock() } diff --git a/g/container/garray/garray_sorted_int.go b/g/container/garray/garray_sorted_int.go index bdeca5460..bb7304220 100644 --- a/g/container/garray/garray_sorted_int.go +++ b/g/container/garray/garray_sorted_int.go @@ -169,13 +169,13 @@ func (a *SortedIntArray) Clear() { // 使用自定义方法执行加锁修改操作 func (a *SortedIntArray) LockFunc(f func(array []int)) { a.mu.Lock() + defer a.mu.Unlock() f(a.array) - a.mu.Unlock() } // 使用自定义方法执行加锁读取操作 func (a *SortedIntArray) RLockFunc(f func(array []int)) { a.mu.RLock() + defer a.mu.RUnlock() f(a.array) - a.mu.RUnlock() } \ No newline at end of file diff --git a/g/container/garray/garray_sorted_interface.go b/g/container/garray/garray_sorted_interface.go index 3e8704bea..3fbc886a0 100644 --- a/g/container/garray/garray_sorted_interface.go +++ b/g/container/garray/garray_sorted_interface.go @@ -154,13 +154,13 @@ func (a *SortedArray) Clear() { // 使用自定义方法执行加锁修改操作 func (a *SortedArray) LockFunc(f func(array []interface{})) { a.mu.Lock() + defer a.mu.Unlock() f(a.array) - a.mu.Unlock() } // 使用自定义方法执行加锁读取操作 func (a *SortedArray) RLockFunc(f func(array []interface{})) { a.mu.RLock() + defer a.mu.RUnlock() f(a.array) - a.mu.RUnlock() } \ No newline at end of file diff --git a/g/container/garray/garray_sorted_string.go b/g/container/garray/garray_sorted_string.go index 020866515..28462b95e 100644 --- a/g/container/garray/garray_sorted_string.go +++ b/g/container/garray/garray_sorted_string.go @@ -164,13 +164,13 @@ func (a *SortedStringArray) Clear() { // 使用自定义方法执行加锁修改操作 func (a *SortedStringArray) LockFunc(f func(array []string)) { a.mu.Lock() + defer a.mu.Unlock() f(a.array) - a.mu.Unlock() } // 使用自定义方法执行加锁读取操作 func (a *SortedStringArray) RLockFunc(f func(array []string)) { a.mu.RLock() + defer a.mu.RUnlock() f(a.array) - a.mu.RUnlock() } \ No newline at end of file diff --git a/g/container/garray/garray_string.go b/g/container/garray/garray_string.go index 2b7a8928d..eee00097c 100644 --- a/g/container/garray/garray_string.go +++ b/g/container/garray/garray_string.go @@ -33,32 +33,32 @@ func NewStringArray(size int, cap ... int) *StringArray { // 获取指定索引的数据项, 调用方注意判断数组边界 func (a *StringArray) Get(index int) string { a.mu.RLock() + defer a.mu.RUnlock() value := a.array[index] - a.mu.RUnlock() return value } // 设置指定索引的数据项, 调用方注意判断数组边界 func (a *StringArray) Set(index int, value string) { a.mu.Lock() + defer a.mu.Unlock() a.array[index] = value - a.mu.Unlock() } // 在当前索引位置前插入一个数据项, 调用方注意判断数组边界 func (a *StringArray) Insert(index int, value string) { a.mu.Lock() - rear := append([]string{}, a.array[index:]...) + defer a.mu.Unlock() + rear := append([]string{}, a.array[index:]...) a.array = append(a.array[0:index], value) a.array = append(a.array, rear...) - a.mu.Unlock() } // 删除指定索引的数据项, 调用方注意判断数组边界 func (a *StringArray) Remove(index int) { a.mu.Lock() + defer a.mu.RUnlock() a.array = append(a.array[:index], a.array[index+1:]...) - a.mu.RUnlock() } // 追加数据项 @@ -109,20 +109,19 @@ func (a *StringArray) Search(value string) int { } } a.mu.RUnlock() - return result } // 使用自定义方法执行加锁修改操作 func (a *StringArray) LockFunc(f func(array []string)) { a.mu.Lock() + defer a.mu.Unlock() f(a.array) - a.mu.Unlock() } // 使用自定义方法执行加锁读取操作 func (a *StringArray) RLockFunc(f func(array []string)) { a.mu.RLock() + defer a.mu.RUnlock() f(a.array) - a.mu.RUnlock() }