| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- package helper
- import (
- "reflect"
- "strings"
- )
- type Result struct {
- val interface{}
- }
- func NewResult(val interface{}) *Result {
- return &Result{val: val}
- }
- func (r *Result) String(defaultval ...string) string {
- switch val := r.val.(type) {
- case string:
- return val
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return ""
- }
- }
- func (r *Result) Val() interface{} {
- return r.val
- }
- func (r *Result) Result() interface{} {
- return r.val
- }
- func (r *Result) Int(defaultval ...int) int {
- switch val := r.val.(type) {
- case int:
- return val
- case string:
- return NewStr(val).ToInt()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return 0
- }
- }
- func (r *Result) Int64(defaultval ...int64) int64 {
- switch val := r.val.(type) {
- case int64:
- return val
- case string:
- return NewStr(val).ToInt64()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return 0
- }
- }
- func (r *Result) Uint64(defaultval ...uint64) uint64 {
- switch val := r.val.(type) {
- case uint64:
- return val
- case string:
- return NewStr(val).ToUint64()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return 0
- }
- }
- func (r *Result) Float32(defaultval ...float32) float32 {
- switch val := r.val.(type) {
- case float32:
- return val
- case string:
- return NewStr(val).ToFloat32()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return 0
- }
- }
- func (r *Result) Float64(defaultval ...float64) float64 {
- switch val := r.val.(type) {
- case float64:
- return val
- case string:
- return NewStr(val).ToFloat64()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return 0
- }
- }
- func (r *Result) Bool(defaultval ...bool) bool {
- switch val := r.val.(type) {
- case bool:
- return val
- case string:
- return NewStr(val).ToBool()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return false
- }
- }
- func (r *Result) Bytes(defaultval ...[]byte) []byte {
- switch val := r.val.(type) {
- case []byte:
- return val
- case string:
- return NewStr(val).ToBytes()
- default:
- for k, v := range defaultval {
- if k == 0 {
- return v
- }
- }
- return nil
- }
- }
- //是否为空
- func (r *Result) Empty() bool {
- if r.val == nil {
- return true
- }
- v := reflect.ValueOf(r.val)
- switch v.Kind() {
- case reflect.String, reflect.Array:
- return v.Len() == 0
- case reflect.Map, reflect.Slice:
- return v.Len() == 0 || v.IsNil()
- case reflect.Bool:
- return !v.Bool()
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- return v.Int() == 0
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- return v.Uint() == 0
- case reflect.Float32, reflect.Float64:
- return v.Float() == 0
- case reflect.Interface, reflect.Ptr:
- return v.IsNil()
- }
- return reflect.DeepEqual(r.val, reflect.Zero(v.Type()).Interface())
- }
- //判断是否为数字
- func (r *Result) IsNumeric() bool {
- switch r.val.(type) {
- case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
- return true
- case float32, float64, complex64, complex128:
- return true
- case string:
- str := r.val.(string)
- if str == "" {
- return false
- }
- str = strings.TrimSpace(str)
- if str[0] == '-' || str[0] == '+' {
- if len(str) == 1 {
- return false
- }
- str = str[1:]
- }
- if len(str) > 2 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X') {
- for _, h := range str[2:] {
- if !((h >= '0' && h <= '9') || (h >= 'a' && h <= 'f') || (h >= 'A' && h <= 'F')) {
- return false
- }
- }
- return true
- }
- p, s, l := 0, 0, len(str)
- for i, v := range str {
- if v == '.' {
- if p > 0 || s > 0 || i+1 == l {
- return false
- }
- p = i
- } else if v == 'e' || v == 'E' {
- if i == 0 || s > 0 || i+1 == l {
- return false
- }
- s = i
- } else if v < '0' || v > '9' {
- return false
- }
- }
- return true
- }
- return false
- }
|