stringConv.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package socketutils
  2. import (
  3. "fmt"
  4. "reflect"
  5. "strconv"
  6. "time"
  7. )
  8. var DefaultTimeLoc = time.Local
  9. // 转换字符串到其他类型
  10. type StrTo string
  11. func (f *StrTo) Set(v string) {
  12. if v != "" {
  13. *f = StrTo(v)
  14. } else {
  15. f.Clear()
  16. }
  17. }
  18. func (f *StrTo) Clear() {
  19. *f = StrTo(0x1E)
  20. }
  21. func (f StrTo) Exist() bool {
  22. return string(f) != string(0x1E)
  23. }
  24. func (f StrTo) Bool() (bool, error) {
  25. return strconv.ParseBool(f.String())
  26. }
  27. func (f StrTo) Float32() (float32, error) {
  28. v, err := strconv.ParseFloat(f.String(), 32)
  29. return float32(v), err
  30. }
  31. func (f StrTo) Float64() (float64, error) {
  32. return strconv.ParseFloat(f.String(), 64)
  33. }
  34. func (f StrTo) Int() (int, error) {
  35. v, err := strconv.ParseInt(f.String(), 10, 32)
  36. return int(v), err
  37. }
  38. func (f StrTo) Int8() (int8, error) {
  39. v, err := strconv.ParseInt(f.String(), 10, 8)
  40. return int8(v), err
  41. }
  42. func (f StrTo) Int16() (int16, error) {
  43. v, err := strconv.ParseInt(f.String(), 10, 16)
  44. return int16(v), err
  45. }
  46. func (f StrTo) Int32() (int32, error) {
  47. v, err := strconv.ParseInt(f.String(), 10, 32)
  48. return int32(v), err
  49. }
  50. func (f StrTo) Int64() (int64, error) {
  51. v, err := strconv.ParseInt(f.String(), 10, 64)
  52. return int64(v), err
  53. }
  54. func (f StrTo) Uint() (uint, error) {
  55. v, err := strconv.ParseUint(f.String(), 10, 32)
  56. return uint(v), err
  57. }
  58. func (f StrTo) Uint8() (uint8, error) {
  59. v, err := strconv.ParseUint(f.String(), 10, 8)
  60. return uint8(v), err
  61. }
  62. func (f StrTo) Uint16() (uint16, error) {
  63. v, err := strconv.ParseUint(f.String(), 10, 16)
  64. return uint16(v), err
  65. }
  66. func (f StrTo) Uint32() (uint32, error) {
  67. v, err := strconv.ParseUint(f.String(), 10, 32)
  68. return uint32(v), err
  69. }
  70. func (f StrTo) Uint64() (uint64, error) {
  71. v, err := strconv.ParseUint(f.String(), 10, 64)
  72. return uint64(v), err
  73. }
  74. func (f StrTo) String() string {
  75. if f.Exist() {
  76. return string(f)
  77. }
  78. return ""
  79. }
  80. // 转换其他类型到字符串
  81. func ToStr(value interface{}, args ...int) (s string) {
  82. switch v := value.(type) {
  83. case bool:
  84. s = strconv.FormatBool(v)
  85. case float32:
  86. s = strconv.FormatFloat(float64(v), 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 32))
  87. case float64:
  88. s = strconv.FormatFloat(v, 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 64))
  89. case int:
  90. s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10))
  91. case int8:
  92. s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10))
  93. case int16:
  94. s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10))
  95. case int32:
  96. s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10))
  97. case int64:
  98. s = strconv.FormatInt(v, argInt(args).Get(0, 10))
  99. case uint:
  100. s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10))
  101. case uint8:
  102. s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10))
  103. case uint16:
  104. s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10))
  105. case uint32:
  106. s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10))
  107. case uint64:
  108. s = strconv.FormatUint(v, argInt(args).Get(0, 10))
  109. case string:
  110. s = v
  111. case []byte:
  112. s = string(v)
  113. default:
  114. s = fmt.Sprintf("%v", v)
  115. }
  116. return s
  117. }
  118. // convert any numeric value to int64
  119. func ToInt64(value interface{}) (d int64) {
  120. val := reflect.ValueOf(value)
  121. switch value.(type) {
  122. case int, int8, int16, int32, int64:
  123. d = val.Int()
  124. case uint, uint8, uint16, uint32, uint64:
  125. d = int64(val.Uint())
  126. default:
  127. panic(fmt.Errorf("ToInt64 need numeric not `%T`", value))
  128. }
  129. return
  130. }
  131. //参数列表取值常用
  132. type argString []string
  133. func (a argString) Get(i int, args ...string) (r string) {
  134. if i >= 0 && i < len(a) {
  135. r = a[i]
  136. } else if len(args) > 0 {
  137. r = args[0]
  138. }
  139. return
  140. }
  141. type argInt []int
  142. func (a argInt) Get(i int, args ...int) (r int) {
  143. if i >= 0 && i < len(a) {
  144. r = a[i]
  145. }
  146. if len(args) > 0 {
  147. r = args[0]
  148. }
  149. return
  150. }
  151. type argAny []interface{}
  152. func (a argAny) Get(i int, args ...interface{}) (r interface{}) {
  153. if i >= 0 && i < len(a) {
  154. r = a[i]
  155. }
  156. if len(args) > 0 {
  157. r = args[0]
  158. }
  159. return
  160. }
  161. // 把字符串转换为time.Time对象
  162. func Str2DateTime(timeStr string) (timeObj time.Time, err error) {
  163. format := "2006-01-02 15:04:05"
  164. timeObj, err = time.Parse(format, timeStr)
  165. //Check(err)
  166. return
  167. }
  168. func Str2Date(timeStr string) (timeObj time.Time, err error) {
  169. format := "2006-01-02"
  170. timeObj, err = time.Parse(format, timeStr)
  171. //Check(err)
  172. return
  173. }
  174. func TimeParse(dateString, format string) (time.Time, error) {
  175. tp, err := time.ParseInLocation(format, dateString, DefaultTimeLoc)
  176. return tp, err
  177. }
  178. func TimeFormat(t time.Time, format string) string {
  179. return t.Format(format)
  180. }
  181. func indirectType(v reflect.Type) reflect.Type {
  182. switch v.Kind() {
  183. case reflect.Ptr:
  184. return indirectType(v.Elem())
  185. default:
  186. return v
  187. }
  188. return v
  189. }