123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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)
- }
- }
- }
- }
|