Parcourir la source

feat:增加任意接口类型强转字符串方法

xuemingyang il y a 3 ans
Parent
commit
0e3f2ad4cd
1 fichiers modifiés avec 43 ajouts et 0 suppressions
  1. 43 0
      src/qfw/util/common.go

+ 43 - 0
src/qfw/util/common.go

@@ -716,3 +716,46 @@ func IsWxBrowser(Request *http.Request) bool {
 		return false
 	}
 }
+
+// data 转换成ret
+func Bind(data interface{}, ret interface{}) error {
+	v := reflect.ValueOf(ret)
+	if v.Kind() != reflect.Ptr {
+		return fmt.Errorf("ptr input ret needed as type as input type %s", v.Kind())
+	}
+	havdata := false
+	var bk interface{}
+	if v.Elem().Kind() == reflect.Slice {
+		t := reflect.Zero(reflect.TypeOf(v.Elem().Interface()))
+		bk = v.Elem().Interface()
+		v.Elem().Set(t)
+		havdata = true
+	}
+	_data, _ := json.MarshalIndent(data, "", "    ")
+	err := json.Unmarshal(_data, ret)
+	if err != nil {
+		fmt.Println(err)
+		if havdata {
+			v.Elem().Set(reflect.ValueOf(bk))
+		}
+		return err
+	}
+	return nil
+}
+
+func InterfaceToStr(x interface{}) string {
+	switch st := reflect.ValueOf(x); st.Kind() {
+	case reflect.Uint, reflect.Uintptr, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+		return strconv.FormatUint(uint64(st.Uint()), 10)
+	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+		return strconv.FormatInt(int64(st.Int()), 10)
+	case reflect.Float32, reflect.Float64:
+		return strconv.FormatFloat(float64(st.Float()), 'g', -1, 64)
+	case reflect.Bool:
+		return strconv.FormatBool(st.Bool())
+	}
+	var ret string
+	_ = Bind(x, &ret)
+	return ret
+
+}