gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/mapx/world-map.go (about) 1 package mapx 2 3 import ( 4 "strings" 5 ) 6 7 func ToMapInterface(st interface{}, val interface{}, args ...interface{}) (r interface{}) { 8 r = cloneAny(st, val, true) 9 return 10 } 11 12 func ToMapStruct(st IToMap, val interface{}, args ...interface{}) { 13 m, ok := val.(map[string]interface{}) 14 if ok == true { 15 st.ToMap(m, args...) 16 } 17 return 18 } 19 20 func ToMapStructByType(val interface{}, args ...interface{}) (r interface{}) { 21 22 toval, ok := val.(IToMap) 23 if ok { 24 m := map[string]interface{}{} 25 toval.ToMap(m, args...) 26 if stname, ok := toval.(IStructName); ok { 27 m["_type"] = stname.StructName() 28 } 29 r = m 30 } else { 31 switch v := val.(type) { 32 case []interface{}: 33 r = cloneArray(v, []interface{}{}, true) 34 case map[string]interface{}: 35 m := map[string]interface{}{} 36 r = cloneAny(v, m, true) 37 default: 38 r = v 39 } 40 } 41 42 return 43 } 44 45 func ToMapAllStruct(st IToMapAll, val interface{}, args ...interface{}) { 46 m, ok := val.(map[string]interface{}) 47 if ok == true { 48 if st != nil { 49 st.ToMapAll(m, args...) 50 } 51 } 52 return 53 } 54 55 func CreateConfigMap2(keys []string, r map[string]interface{}, val interface{}) { 56 cur := r 57 l := len(keys) 58 for i := 0; i < l; i++ { 59 k := keys[i] 60 if i != l-1 { 61 a := map[string]interface{}{} 62 cur[k] = a 63 cur = a 64 } else { 65 cur[k] = val 66 } 67 } 68 69 return 70 } 71 72 func CreateConfigMap3(keys string, r map[string]interface{}, val interface{}) { 73 arrs := strings.Split(keys, ".") 74 75 cur := r 76 l := len(arrs) 77 for i := 0; i < l; i++ { 78 k := arrs[i] 79 if i != l-1 { 80 a := map[string]interface{}{} 81 cur[k] = a 82 cur = a 83 } else { 84 cur[k] = val 85 } 86 } 87 88 return 89 }