diff --git a/g/util/gconv/gconv_struct.go b/g/util/gconv/gconv_struct.go index 8f3441dd2..869be54ca 100644 --- a/g/util/gconv/gconv_struct.go +++ b/g/util/gconv/gconv_struct.go @@ -91,21 +91,26 @@ func Struct(params interface{}, objPointer interface{}, attrMapping...map[string } for mapk, mapv := range paramsMap { name := "" - for _, v := range []string{ + for _, checkName := range []string { gstr.UcFirst(mapk), gstr.ReplaceByMap(mapk, map[string]string{ "_" : "", "-" : "", + " " : "", })} { - if _, ok := dmap[v]; ok { + if _, ok := dmap[checkName]; ok { continue } - if _, ok := tagmap[v]; ok { + if _, ok := tagmap[checkName]; ok { continue } // 循环查找属性名称进行匹配 attrset.Iterator(func(value string) bool { - if strings.EqualFold(value, v) { + if strings.EqualFold(checkName, value) { + name = value + return false + } + if strings.EqualFold(checkName, gstr.Replace(value, "_", "")) { name = value return false } diff --git a/geg/util/gconv/gconv_struct1.go b/geg/util/gconv/gconv_struct1.go index 5481c1599..cee49b7c1 100644 --- a/geg/util/gconv/gconv_struct1.go +++ b/geg/util/gconv/gconv_struct1.go @@ -1,16 +1,17 @@ package main import ( - "fmt" "gitee.com/johng/gf/g" "gitee.com/johng/gf/g/util/gconv" ) type User struct { - Uid int - Name string - Pass1 string `gconv:"password1"` - Pass2 string `gconv:"password2"` + Uid int + Name string + Site_Url string + NickName string + Pass1 string `gconv:"password1"` + Pass2 string `gconv:"password2"` } func main() { @@ -19,13 +20,15 @@ func main() { // 使用默认映射规则绑定属性值到对象 user = new(User) params1 := g.Map{ - "uid" : 1, - "Name" : "john", - "PASS1" : "123", - "PaSs2" : "456", + "uid" : 1, + "Name" : "john", + "siteurl" : "https://gfer.me", + "nick_name" : "johng", + "PASS1" : "123", + "PASS2" : "456", } if err := gconv.Struct(params1, user); err == nil { - fmt.Println(user) + g.Dump(user) } // 使用struct tag映射绑定属性值到对象 @@ -33,10 +36,12 @@ func main() { params2 := g.Map { "uid" : 2, "name" : "smith", + "site-url" : "https://gfer.me", + "nick name" : "johng", "password1" : "111", "password2" : "222", } if err := gconv.Struct(params2, user); err == nil { - fmt.Println(user) + g.Dump(user) } } \ No newline at end of file