result.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package helper
  2. import (
  3. "reflect"
  4. "strings"
  5. )
  6. type Result struct {
  7. val interface{}
  8. }
  9. func NewResult(val interface{}) *Result {
  10. return &Result{val: val}
  11. }
  12. func (r *Result) String(defaultval ...string) string {
  13. switch val := r.val.(type) {
  14. case string:
  15. return val
  16. default:
  17. for k, v := range defaultval {
  18. if k == 0 {
  19. return v
  20. }
  21. }
  22. return ""
  23. }
  24. }
  25. func (r *Result) Val() interface{} {
  26. return r.val
  27. }
  28. func (r *Result) Result() interface{} {
  29. return r.val
  30. }
  31. func (r *Result) Int(defaultval ...int) int {
  32. switch val := r.val.(type) {
  33. case int:
  34. return val
  35. case string:
  36. return NewStr(val).ToInt()
  37. default:
  38. for k, v := range defaultval {
  39. if k == 0 {
  40. return v
  41. }
  42. }
  43. return 0
  44. }
  45. }
  46. func (r *Result) Int64(defaultval ...int64) int64 {
  47. switch val := r.val.(type) {
  48. case int64:
  49. return val
  50. case string:
  51. return NewStr(val).ToInt64()
  52. default:
  53. for k, v := range defaultval {
  54. if k == 0 {
  55. return v
  56. }
  57. }
  58. return 0
  59. }
  60. }
  61. func (r *Result) Uint64(defaultval ...uint64) uint64 {
  62. switch val := r.val.(type) {
  63. case uint64:
  64. return val
  65. case string:
  66. return NewStr(val).ToUint64()
  67. default:
  68. for k, v := range defaultval {
  69. if k == 0 {
  70. return v
  71. }
  72. }
  73. return 0
  74. }
  75. }
  76. func (r *Result) Float32(defaultval ...float32) float32 {
  77. switch val := r.val.(type) {
  78. case float32:
  79. return val
  80. case string:
  81. return NewStr(val).ToFloat32()
  82. default:
  83. for k, v := range defaultval {
  84. if k == 0 {
  85. return v
  86. }
  87. }
  88. return 0
  89. }
  90. }
  91. func (r *Result) Float64(defaultval ...float64) float64 {
  92. switch val := r.val.(type) {
  93. case float64:
  94. return val
  95. case string:
  96. return NewStr(val).ToFloat64()
  97. default:
  98. for k, v := range defaultval {
  99. if k == 0 {
  100. return v
  101. }
  102. }
  103. return 0
  104. }
  105. }
  106. func (r *Result) Bool(defaultval ...bool) bool {
  107. switch val := r.val.(type) {
  108. case bool:
  109. return val
  110. case string:
  111. return NewStr(val).ToBool()
  112. default:
  113. for k, v := range defaultval {
  114. if k == 0 {
  115. return v
  116. }
  117. }
  118. return false
  119. }
  120. }
  121. func (r *Result) Bytes(defaultval ...[]byte) []byte {
  122. switch val := r.val.(type) {
  123. case []byte:
  124. return val
  125. case string:
  126. return NewStr(val).ToBytes()
  127. default:
  128. for k, v := range defaultval {
  129. if k == 0 {
  130. return v
  131. }
  132. }
  133. return nil
  134. }
  135. }
  136. //是否为空
  137. func (r *Result) Empty() bool {
  138. if r.val == nil {
  139. return true
  140. }
  141. v := reflect.ValueOf(r.val)
  142. switch v.Kind() {
  143. case reflect.String, reflect.Array:
  144. return v.Len() == 0
  145. case reflect.Map, reflect.Slice:
  146. return v.Len() == 0 || v.IsNil()
  147. case reflect.Bool:
  148. return !v.Bool()
  149. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  150. return v.Int() == 0
  151. case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
  152. return v.Uint() == 0
  153. case reflect.Float32, reflect.Float64:
  154. return v.Float() == 0
  155. case reflect.Interface, reflect.Ptr:
  156. return v.IsNil()
  157. }
  158. return reflect.DeepEqual(r.val, reflect.Zero(v.Type()).Interface())
  159. }
  160. //判断是否为数字
  161. func (r *Result) IsNumeric() bool {
  162. switch r.val.(type) {
  163. case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
  164. return true
  165. case float32, float64, complex64, complex128:
  166. return true
  167. case string:
  168. str := r.val.(string)
  169. if str == "" {
  170. return false
  171. }
  172. str = strings.TrimSpace(str)
  173. if str[0] == '-' || str[0] == '+' {
  174. if len(str) == 1 {
  175. return false
  176. }
  177. str = str[1:]
  178. }
  179. if len(str) > 2 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X') {
  180. for _, h := range str[2:] {
  181. if !((h >= '0' && h <= '9') || (h >= 'a' && h <= 'f') || (h >= 'A' && h <= 'F')) {
  182. return false
  183. }
  184. }
  185. return true
  186. }
  187. p, s, l := 0, 0, len(str)
  188. for i, v := range str {
  189. if v == '.' {
  190. if p > 0 || s > 0 || i+1 == l {
  191. return false
  192. }
  193. p = i
  194. } else if v == 'e' || v == 'E' {
  195. if i == 0 || s > 0 || i+1 == l {
  196. return false
  197. }
  198. s = i
  199. } else if v < '0' || v > '9' {
  200. return false
  201. }
  202. }
  203. return true
  204. }
  205. return false
  206. }