github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/strutil/api.go (about) 1 package strutil 2 3 import ( 4 "encoding" 5 "fmt" 6 "reflect" 7 "strconv" 8 ) 9 10 func ConvertFromStr(s string, v reflect.Value) error { 11 if v.CanAddr() { 12 if textUnmarshal, ok := v.Addr().Interface().(encoding.TextUnmarshaler); ok { 13 return textUnmarshal.UnmarshalText([]byte(s)) 14 } 15 } 16 return StdStringifier.Unmarshal(s, v) 17 } 18 19 func ConvertToStr(v interface{}) (string, error) { 20 if stringer, ok := v.(fmt.Stringer); ok { 21 return stringer.String(), nil 22 } 23 rt := reflect.TypeOf(v) 24 switch rt.Kind() { 25 case reflect.String: 26 return v.(string), nil 27 case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint8: 28 return fmt.Sprintf("%d", v), nil 29 case reflect.Bool: 30 return strconv.FormatBool(v.(bool)), nil 31 case reflect.Float32: 32 return strconv.FormatFloat(float64(v.(float32)), 'f', -1, 32), nil 33 case reflect.Float64: 34 return strconv.FormatFloat(v.(float64), 'f', -1, 64), nil 35 default: 36 return "", UnSupportTypeError 37 } 38 }