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  }