package hotime import ( "encoding/json" "errors" "strconv" "strings" ) //仅限于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: data, err := json.Marshal(obj) if err != nil { err = errors.New("没有合适的转换对象!" + err.Error()) v = nil } v = Map{} e := json.Unmarshal(data, &v) if e != nil { err = errors.New("没有合适的转换对象!" + e.Error()) v = nil } } } 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{}) case []string: v = Slice{} for i := 0; i < len(obj.([]string)); i++ { v = append(v, obj.([]string)[i]) } 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 } //字符串数组: a1,a2,a3转["a1","a2","a3"] func StrArrayToJsonStr(a string) string { if len(a) != 0 { if a[0] == ',' { a = Substr(a, 1, len(a)) } a = strings.Replace(a, ",", `","`, -1) a = `["` + a + `"]` } else { a = "[]" } return a } //字符串数组: a1,a2,a3转["a1","a2","a3"] func JsonStrToStrArray(a string) string { a = strings.Replace(a, `"`, "", -1) if len(a) != 0 { a = Substr(a, 1, len(a)-2) } return "," + a } //字符串转int func StrToInt(s string) (int, error) { i, err := strconv.Atoi(s) return i, err }