diff --git a/array.go b/array.go index 279031e..40716bf 100644 --- a/array.go +++ b/array.go @@ -20,7 +20,7 @@ import ( // Author : go_developer@163.com<白茶清欢> // // Date : 21:03 2023/6/11 -func ArrayType(value interface{}) *Array { +func ArrayType(value any) *Array { at := &Array{ value: value, } @@ -34,8 +34,8 @@ func ArrayType(value interface{}) *Array { // // Date : 21:05 2023/6/11 type Array struct { - value interface{} - convertResult []interface{} + value any + convertResult []any convertErr error isSimpleSlice bool // 是否简单list, 即数据的每一项类型相同, 且都是基础内置数据类型 itemType reflect.Kind // 简单list场景下, 每一项的数据类型 @@ -75,7 +75,7 @@ func (at *Array) ItemIsInterface() bool { if !at.IsValid() { return false } - if _, ok := at.value.([]interface{}); ok { + if _, ok := at.value.([]any); ok { return true } return false @@ -86,10 +86,10 @@ func (at *Array) ItemIsInterface() bool { // Author : go_developer@163.com<白茶清欢> // // Date : 17:59 2023/6/12 -func (at *Array) Convert() ([]interface{}, error) { +func (at *Array) Convert() ([]any, error) { if at.IsNil() { // 空指针 - at.convertResult = make([]interface{}, 0) + at.convertResult = make([]any, 0) return at.convertResult, nil } if !at.IsValid() { @@ -101,117 +101,117 @@ func (at *Array) Convert() ([]interface{}, error) { case []int8: at.isSimpleSlice = true at.itemType = reflect.Int8 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []int16: at.isSimpleSlice = true at.itemType = reflect.Int16 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []int32: at.isSimpleSlice = true at.itemType = reflect.Int32 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []int64: at.isSimpleSlice = true at.itemType = reflect.Int64 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []int: at.isSimpleSlice = true at.itemType = reflect.Int - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []uint: at.isSimpleSlice = true at.itemType = reflect.Uint - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []uint8: at.isSimpleSlice = true at.itemType = reflect.Uint8 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []uint16: at.isSimpleSlice = true at.itemType = reflect.Uint16 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []uint32: at.isSimpleSlice = true at.itemType = reflect.Int32 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []uint64: at.isSimpleSlice = true at.itemType = reflect.Int64 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []float32: at.isSimpleSlice = true at.itemType = reflect.Float32 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []float64: at.isSimpleSlice = true at.itemType = reflect.Float64 - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []bool: at.isSimpleSlice = true at.itemType = reflect.Bool - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } case []string: at.isSimpleSlice = true at.itemType = reflect.String - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } - case []interface{}: + case []any: at.isSimpleSlice = false at.itemType = reflect.Interface - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) copy(at.convertResult, val) case []struct{}: at.isSimpleSlice = false at.itemType = reflect.Interface - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } - case []map[string]interface{}: + case []map[string]any: at.isSimpleSlice = false at.itemType = reflect.Interface - at.convertResult = make([]interface{}, len(val)) + at.convertResult = make([]any, len(val)) for i := 0; i < len(val); i++ { at.convertResult[i] = val[i] } @@ -226,7 +226,7 @@ func (at *Array) Convert() ([]interface{}, error) { // Author : go_developer@163.com<白茶清欢> // // Date : 18:07 2023/6/26 -func (at *Array) ConvertIgnoreError() []interface{} { +func (at *Array) ConvertIgnoreError() []any { res, _ := at.Convert() return res } @@ -250,22 +250,32 @@ func (at *Array) ToStringSlice() []string { // Author : go_developer@163.com<白茶清欢> // // Date : 17:43 2023/6/12 -func (at *Array) Unique() []interface{} { - result := make([]interface{}, 0) - if at.isSimpleSlice { - // 简单数据类型 - dataTable := make(map[string]bool) - for _, item := range at.convertResult { - k := fmt.Sprintf("%v", item) - if _, exist := dataTable[k]; exist { - continue - } - dataTable[k] = true - result = append(result, item) +func (at *Array) Unique() StringResult { + result := make([]any, 0) + dataTable := make(map[string]bool) + + for _, item := range at.convertResult { + k := "" + if at.isSimpleSlice { + // 简单数据类型 + k = fmt.Sprintf("%v", item) + } else { + // 非简单类型 + byteData, _ := json.Marshal(item) + k = string(byteData) } - return result + if _, exist := dataTable[k]; exist { + continue + } + dataTable[k] = true + result = append(result, item) } - return []interface{}{} + byteData, _ := json.Marshal(result) + return StringResult{ + Value: string(byteData), + Err: nil, + } + } // Has 查询一个值是否在列表里, 在的话, 返回首次出现的索引, 不在返回-1 @@ -273,7 +283,7 @@ func (at *Array) Unique() []interface{} { // Author : go_developer@163.com<白茶清欢> // // Date : 16:28 2023/7/31 -func (at *Array) Has(input interface{}) int { +func (at *Array) Has(input any) int { for idx := 0; idx < len(at.convertResult); idx++ { if nil == input { if nil != at.convertResult[idx] {