empty.go 728 B

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