- 将一些reflect相关的函数称到utils_reflect.go里

This commit is contained in:
gazebo
2019-06-05 21:42:04 +08:00
parent d472c9f449
commit d1911a1215
2 changed files with 26 additions and 27 deletions

View File

@@ -7,7 +7,6 @@ import (
"fmt" "fmt"
"math" "math"
"net/url" "net/url"
"reflect"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@@ -22,17 +21,6 @@ var (
ZeroTimeValue = time.Time{} ZeroTimeValue = time.Time{}
) )
func GetConcretValue(value reflect.Value) reflect.Value {
for {
if value.Kind() == reflect.Interface || value.Kind() == reflect.Ptr {
value = value.Elem()
} else {
break
}
}
return value
}
func UnmarshalUseNumber(data []byte, result interface{}) error { func UnmarshalUseNumber(data []byte, result interface{}) error {
err := TryUnmarshalUseNumber(data, result) err := TryUnmarshalUseNumber(data, result)
if err != nil { if err != nil {
@@ -184,21 +172,6 @@ func Interface2StringList(data interface{}) []string {
return retVal return retVal
} }
func Interface2Slice(value interface{}) (retVal []interface{}) {
typeInfo := reflect.TypeOf(value)
if typeInfo.Kind() != reflect.Slice {
panic("list must be slice type!")
}
if value != nil {
valueInfo := reflect.ValueOf(value)
retVal = make([]interface{}, valueInfo.Len())
for i := 0; i < valueInfo.Len(); i++ {
retVal[i] = valueInfo.Index(i).Interface()
}
}
return retVal
}
func Slice2MapSlice(data []interface{}) []map[string]interface{} { func Slice2MapSlice(data []interface{}) []map[string]interface{} {
retVal := make([]map[string]interface{}, len(data)) retVal := make([]map[string]interface{}, len(data))
for k, v := range data { for k, v := range data {

View File

@@ -57,3 +57,29 @@ func IndirectType(objType reflect.Type) reflect.Type {
} }
return objType return objType
} }
func GetConcretValue(value reflect.Value) reflect.Value {
for {
if value.Kind() == reflect.Interface || value.Kind() == reflect.Ptr {
value = value.Elem()
} else {
break
}
}
return value
}
func Interface2Slice(value interface{}) (retVal []interface{}) {
typeInfo := reflect.TypeOf(value)
if typeInfo.Kind() != reflect.Slice {
panic("list must be slice type!")
}
if value != nil {
valueInfo := reflect.ValueOf(value)
retVal = make([]interface{}, valueInfo.Len())
for i := 0; i < valueInfo.Len(); i++ {
retVal[i] = valueInfo.Index(i).Interface()
}
}
return retVal
}