package hotime import ( "errors" "strconv" "encoding/json" ) //仅限于hotime.Slice func ObjToMap(obj interface{},e... *Error) Map { var err error var v Map if obj == nil { v = nil err = errors.New("没有合适的转换对象!") } else { switch obj.(type){ case Map:v = obj.(Map) case map[string]interface {}:v=obj.(map[string]interface{}) default: v = nil err = errors.New("没有合适的转换对象!") } } if(len(e)!=0){ e[0].SetError(err) } return v } //仅限于hotime.Slice func ObjToSlice(obj interface{},e... *Error) Slice{ var err error var v Slice if obj == nil { v = nil err = errors.New("没有合适的转换对象!") } else { switch obj.(type) { case Slice: v = obj.(Slice) case []interface {}:v=obj.([]interface{}) default: v = nil err = errors.New("没有合适的转换对象!") } } if(len(e)!=0){ e[0].SetError(err) } return v } func ObjToFloat64(obj interface{},e... *Error) float64 { var err error v := float64(0) if obj == nil { err = errors.New("没有合适的转换对象!") } else { switch obj.(type) { case int: v = float64(obj.(int)) case int64: v = float64(obj.(int64)) case string: value, e := strconv.ParseFloat(obj.(string), 64) if e != nil { v = float64(0) err = e } else { v = value } case float64: v = obj.(float64) case float32: v = float64(obj.(float32)) case uint8: value, e := strconv.ParseFloat(obj.(string), 64) if e != nil { v = float64(0) err = e } else { v = value } default: v = float64(0) err = errors.New("没有合适的转换对象!") } } if(len(e)!=0){ e[0].SetError(err) } return v } func ObjToInt64(obj interface{},e... *Error) int64 { var err error v := int64(0) if obj == nil { err = errors.New("没有合适的转换对象!") } else { switch obj.(type) { case int: v = int64(obj.(int)) case int64: v = obj.(int64) case string: value, e := StrToInt(obj.(string)) if e != nil { v = int64(0) err = e } else { v = int64(value) } case uint8: value, e := StrToInt(obj.(string)) if e != nil { v = int64(0) err = e } else { v = int64(value) } case float64: v = int64(obj.(float64)) case float32: v = int64(obj.(float32)) default: v = int64(0) err = errors.New("没有合适的转换对象!") } } if(len(e)!=0){ e[0].SetError(err) } return v } func ObjToInt(obj interface{},e... *Error) int { var err error v := 0 if obj == nil { err = errors.New("没有合适的转换对象!") } else { switch obj.(type) { case int: v = obj.(int) case int64: v = int(obj.(int64)) case string: value, e := StrToInt(obj.(string)) if e != nil { v = 0 err = e } else { v = value } case uint8: value, e := StrToInt(obj.(string)) if e != nil { v = 0 err = e } else { v = value } case float64: v = int(obj.(float64)) case float32: v = int(obj.(float32)) default: v = 0 err = errors.New("没有合适的转换对象!") } } if(len(e)!=0){ e[0].SetError(err) } return v } func ObjToStr(obj interface{}) string { // fmt.Println(reflect.ValueOf(obj).Type().String() ) str := "" if obj==nil{ return str } switch obj.(type) { case int: str = strconv.Itoa(obj.(int)) case uint8: str = obj.(string) case int64: str = strconv.FormatInt(obj.(int64), 10) case []byte: str = string(obj.([]byte)) case string: str = obj.(string) case float64: str = strconv.FormatFloat(obj.(float64), 'f', 6, 64) default: strbte,err:=json.Marshal(obj); if err==nil{ str=string(strbte) } } return str } //字符串转int func StrToInt(s string) (int, error) { i, err := strconv.Atoi(s) return i, err }