增加array convert方法
This commit is contained in:
parent
2062e84b99
commit
7524ba931f
173
array.go
173
array.go
@ -9,6 +9,8 @@ package wrapper
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -18,9 +20,11 @@ import (
|
|||||||
//
|
//
|
||||||
// Date : 21:03 2023/6/11
|
// Date : 21:03 2023/6/11
|
||||||
func Array(value interface{}) *ArrayType {
|
func Array(value interface{}) *ArrayType {
|
||||||
return &ArrayType{
|
at := &ArrayType{
|
||||||
value: value,
|
value: value,
|
||||||
}
|
}
|
||||||
|
at.Convert()
|
||||||
|
return at
|
||||||
}
|
}
|
||||||
|
|
||||||
// ArrayType ...
|
// ArrayType ...
|
||||||
@ -30,6 +34,10 @@ func Array(value interface{}) *ArrayType {
|
|||||||
// Date : 21:05 2023/6/11
|
// Date : 21:05 2023/6/11
|
||||||
type ArrayType struct {
|
type ArrayType struct {
|
||||||
value interface{}
|
value interface{}
|
||||||
|
convertResult []interface{}
|
||||||
|
convertErr error
|
||||||
|
isSimpleSlice bool
|
||||||
|
itemType reflect.Kind
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsNil 输入是否为nil
|
// IsNil 输入是否为nil
|
||||||
@ -71,3 +79,166 @@ func (at *ArrayType) ItemIsInterface() bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert 类型转换
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 17:59 2023/6/12
|
||||||
|
func (at *ArrayType) Convert() {
|
||||||
|
if at.IsNil() {
|
||||||
|
// 空指针
|
||||||
|
at.convertResult = make([]interface{}, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !at.IsValid() {
|
||||||
|
// 无效slice
|
||||||
|
at.convertErr = errors.New("input slice is invalid")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch val := at.value.(type) {
|
||||||
|
case []int8:
|
||||||
|
at.isSimpleSlice = true
|
||||||
|
at.itemType = reflect.Int8
|
||||||
|
at.convertResult = make([]interface{}, 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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
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))
|
||||||
|
for i := 0; i < len(val); i++ {
|
||||||
|
at.convertResult[i] = val[i]
|
||||||
|
}
|
||||||
|
case []interface{}:
|
||||||
|
at.isSimpleSlice = false
|
||||||
|
at.itemType = reflect.Interface
|
||||||
|
at.convertResult = make([]interface{}, len(val))
|
||||||
|
for i := 0; i < len(val); i++ {
|
||||||
|
at.convertResult[i] = val[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsSimpleSlice 是否简单list, 即数据的每一项类型相同, 且都是基础内置数据类型
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 17:50 2023/6/12
|
||||||
|
func (at *ArrayType) IsSimpleSlice() bool {
|
||||||
|
if at.ItemIsInterface() {
|
||||||
|
// 每一项都是interface
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
switch at.value.(type) {
|
||||||
|
case []int8:
|
||||||
|
case []int16:
|
||||||
|
case []int32:
|
||||||
|
case []int64:
|
||||||
|
case []int:
|
||||||
|
case []uint:
|
||||||
|
case []uint8:
|
||||||
|
case []uint16:
|
||||||
|
case []uint32:
|
||||||
|
case []uint64:
|
||||||
|
case []float32:
|
||||||
|
case []float64:
|
||||||
|
case []bool:
|
||||||
|
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique 对数据结果进行去重
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 17:43 2023/6/12
|
||||||
|
func (at *ArrayType) Unique() []interface{} {
|
||||||
|
return []interface{}{}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user