reflect.go 1018 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package xreflect
  2. import (
  3. "encoding/json"
  4. "reflect"
  5. "strconv"
  6. "kpt-tmr-group/pkg/xerr"
  7. )
  8. var ErrUnkownType = xerr.New("unknown type")
  9. func SetString(target reflect.Value, val string) error {
  10. if target.Kind() == reflect.String {
  11. target.SetString(val)
  12. return nil
  13. }
  14. return json.Unmarshal([]byte(val), target.Addr().Interface())
  15. }
  16. func ToString(target reflect.Value) (string, error) {
  17. switch target.Kind() {
  18. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  19. return strconv.FormatInt(target.Int(), 10), nil
  20. case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  21. return strconv.FormatUint(target.Uint(), 10), nil
  22. case reflect.Float32:
  23. return strconv.FormatFloat(target.Float(), 'f', -1, 32), nil
  24. case reflect.Float64:
  25. return strconv.FormatFloat(target.Float(), 'f', -1, 64), nil
  26. case reflect.Bool:
  27. return strconv.FormatBool(target.Bool()), nil
  28. case reflect.String:
  29. return target.String(), nil
  30. default:
  31. return "", ErrUnkownType
  32. }
  33. }