1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package main
- import "reflect"
- func IsPresent(slice []string, val string) bool {
- for _, item := range slice {
- if item == val {
- return true
- }
- }
- return false
- }
- func IsEmpty(value interface{}) bool {
- t := reflect.TypeOf(value)
- v := reflect.ValueOf(value)
- switch v.Kind() {
- case reflect.Slice:
- return v.Len() == 0
- default:
- return value == reflect.Zero(t).Interface()
- }
- }
- func Merge(key string, value, obj interface{}) {
- if IsEmpty(value) {
- return
- }
- field := reflect.ValueOf(obj).Elem().FieldByName(key)
- if field.CanSet() {
- switch field.Kind() {
- case reflect.Int:
- field.Set(reflect.ValueOf(value))
- case reflect.Int16:
- field.Set(reflect.ValueOf(value))
- case reflect.Int32:
- field.Set(reflect.ValueOf(value))
- case reflect.Int64:
- field.SetInt(value.(int64))
- case reflect.Bool:
- field.SetBool(value.(bool))
- case reflect.String:
- field.SetString(value.(string))
- case reflect.Slice:
- field.Set(reflect.ValueOf(value))
- case reflect.Ptr:
- field.Set(reflect.ValueOf(value))
- default:
- Merge(key, value, field)
- }
- }
- }
|