utils.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package main
  2. import "reflect"
  3. func IsPresent(slice []string, val string) bool {
  4. for _, item := range slice {
  5. if item == val {
  6. return true
  7. }
  8. }
  9. return false
  10. }
  11. func IsEmpty(value interface{}) bool {
  12. t := reflect.TypeOf(value)
  13. v := reflect.ValueOf(value)
  14. switch v.Kind() {
  15. case reflect.Slice:
  16. return v.Len() == 0
  17. default:
  18. return value == reflect.Zero(t).Interface()
  19. }
  20. }
  21. func Merge(key string, value, obj interface{}) {
  22. if IsEmpty(value) {
  23. return
  24. }
  25. field := reflect.ValueOf(obj).Elem().FieldByName(key)
  26. if field.CanSet() {
  27. switch field.Kind() {
  28. case reflect.Int:
  29. field.Set(reflect.ValueOf(value))
  30. case reflect.Int16:
  31. field.Set(reflect.ValueOf(value))
  32. case reflect.Int32:
  33. field.Set(reflect.ValueOf(value))
  34. case reflect.Int64:
  35. field.SetInt(value.(int64))
  36. case reflect.Bool:
  37. field.SetBool(value.(bool))
  38. case reflect.String:
  39. field.SetString(value.(string))
  40. case reflect.Slice:
  41. field.Set(reflect.ValueOf(value))
  42. case reflect.Ptr:
  43. field.Set(reflect.ValueOf(value))
  44. default:
  45. Merge(key, value, field)
  46. }
  47. }
  48. }