package utils import ( "fmt" "reflect" "strings" ) func ReflectTrans(obj interface{}) { v := reflect.ValueOf(obj).Elem() t := v.Type() data := make(map[string]string) for k := 0; k < t.NumField(); k++ { if t.Field(k).Type.Kind() == reflect.Bool { key := fmt.Sprintf("%sStr", t.Field(k).Name) value := "no" if v.Field(k).Interface().(bool) { value = "yes" } data[key] = value } } for k := 0; k < t.NumField(); k++ { if value, ok := data[t.Field(k).Name]; ok { v.Field(k).SetString(value) if v.Field(k).CanSet() { v.Field(k).SetString(value) } } } } func MapTrans(obj interface{}) { v := reflect.ValueOf(obj).Elem() t := v.Type() data := make(map[string]bool) for k := 0; k < t.NumField(); k++ { if v.Field(k).Interface() == "yes" || v.Field(k).Interface() == "no" { key := strings.TrimSuffix(t.Field(k).Name, "Str") var value bool if v.Field(k).Interface().(string) == "yes" { value = true } else { value = false } data[key] = value } } for k := 0; k < t.NumField(); k++ { if value, ok := data[t.Field(k).Name]; ok { v.Field(k).SetBool(value) if v.Field(k).CanSet() { v.Field(k).SetBool(value) } } } }