empty.go 781 B

12345678910111213141516171819202122232425262728
  1. package utils
  2. import "reflect"
  3. //IsEmpty Determine whether a variable is empty
  4. func IsEmpty(val interface{}) bool {
  5. if val == nil {
  6. return true
  7. }
  8. v := reflect.ValueOf(val)
  9. switch v.Kind() {
  10. case reflect.String, reflect.Array:
  11. return v.Len() == 0
  12. case reflect.Map, reflect.Slice:
  13. return v.Len() == 0 || v.IsNil()
  14. case reflect.Bool:
  15. return !v.Bool()
  16. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  17. return v.Int() == 0
  18. case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
  19. return v.Uint() == 0
  20. case reflect.Float32, reflect.Float64:
  21. return v.Float() == 0
  22. case reflect.Interface, reflect.Ptr:
  23. return v.IsNil()
  24. }
  25. return reflect.DeepEqual(val, reflect.Zero(v.Type()).Interface())
  26. }