lxg 3 роки тому
батько
коміт
dbfd182f48
4 змінених файлів з 96 додано та 1 видалено
  1. 95 0
      helper/convert/convert.go
  2. 0 0
      helper/utils/utils.go
  3. 0 0
      helper/utils/utils_test.go
  4. 1 1
      service.go

+ 95 - 0
helper/convert/convert.go

@@ -0,0 +1,95 @@
+package convert
+
+import (
+	"errors"
+	"fmt"
+	"reflect"
+	"strconv"
+)
+
+var (
+	ErrUnsupported = errors.New("unsupported")
+)
+
+func isBytes(v reflect.Value) bool {
+	if v.Kind() == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 {
+		return true
+	}
+	return false
+}
+
+func StringValue(v interface{}) (s string, err error) {
+	refValue := reflect.Indirect(reflect.ValueOf(v))
+	switch refValue.Kind() {
+	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+		s = strconv.FormatInt(refValue.Int(), 10)
+	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+		s = strconv.FormatUint(refValue.Uint(), 10)
+	case reflect.Float32, reflect.Float64:
+		s = strconv.FormatFloat(refValue.Float(), 'f', -1, 64)
+	default:
+		if isBytes(refValue) {
+			s = string(refValue.Bytes())
+		} else {
+			s = fmt.Sprint(refValue.Interface())
+		}
+	}
+	return
+}
+
+func IntegerValue(v interface{}) (n int64, err error) {
+	refValue := reflect.Indirect(reflect.ValueOf(v))
+	switch refValue.Kind() {
+	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+		n = refValue.Int()
+	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+		n = int64(refValue.Uint())
+	case reflect.Float32, reflect.Float64:
+		n = int64(refValue.Float())
+	case reflect.String:
+		n, err = strconv.ParseInt(refValue.String(), 10, 64)
+	default:
+		if isBytes(refValue) {
+			n, err = strconv.ParseInt(string(refValue.Bytes()), 10, 64)
+		} else {
+			err = ErrUnsupported
+		}
+	}
+	return
+}
+
+func FloatValue(v interface{}) (n float64, err error) {
+	refValue := reflect.Indirect(reflect.ValueOf(v))
+	switch refValue.Kind() {
+	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+		n = float64(refValue.Int())
+	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+		n = float64(refValue.Uint())
+	case reflect.Float32, reflect.Float64:
+		n = refValue.Float()
+	case reflect.String:
+		n, err = strconv.ParseFloat(refValue.String(), 64)
+	default:
+		if isBytes(refValue) {
+			n, err = strconv.ParseFloat(string(refValue.Bytes()), 64)
+		} else {
+			err = ErrUnsupported
+		}
+	}
+	return
+}
+
+func MustString(v interface{}) (s string) {
+	s, _ = StringValue(v)
+	return
+}
+
+func MustInteger(v interface{}) (n int64) {
+	n, _ = IntegerValue(v)
+	return
+}
+
+func MustFloat(v interface{}) (n float64) {
+	n, _ = FloatValue(v)
+	return
+}

+ 0 - 0
helper/utils/helper.go → helper/utils/utils.go


+ 0 - 0
helper/utils/helper_test.go → helper/utils/utils_test.go


+ 1 - 1
service.go

@@ -435,7 +435,7 @@ func (svr *Service) Run() (err error) {
 	if err = svr.prepare(); err != nil {
 		return
 	}
-	//设置全局的代理组件
+	//set global broker component
 	broker.SetGlobal(broker.NewInPrcBus(svr.ctx))
 	//start server
 	if svr.opts.Server != nil {