diff --git a/container/gvar/gvar_map.go b/container/gvar/gvar_map.go index 7ac163904..56bace487 100644 --- a/container/gvar/gvar_map.go +++ b/container/gvar/gvar_map.go @@ -13,6 +13,11 @@ func (v *Var) Map(tags ...string) map[string]interface{} { return gconv.Map(v.Val(), tags...) } +// MapStrAny is like function Map, but implements the interface of MapStrAny. +func (v *Var) MapStrAny() map[string]interface{} { + return v.Map() +} + // MapStrStr converts and returns as map[string]string. func (v *Var) MapStrStr(tags ...string) map[string]string { return gconv.MapStrStr(v.Val(), tags...) diff --git a/container/gvar/gvar_z_unit_struct_test.go b/container/gvar/gvar_z_unit_struct_test.go index deb33d0c1..64f7f0d40 100644 --- a/container/gvar/gvar_z_unit_struct_test.go +++ b/container/gvar/gvar_z_unit_struct_test.go @@ -10,6 +10,7 @@ import ( "github.com/gogf/gf/container/gvar" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/test/gtest" + "github.com/gogf/gf/util/gconv" "testing" ) @@ -40,3 +41,36 @@ func Test_Struct(t *testing.T) { t.Assert(o.Test, -25) }) } + +func Test_Var_Attribute_Struct(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + type User struct { + Uid int + Name string + } + user := new(User) + err := gconv.Struct( + g.Map{ + "uid": gvar.New(1), + "name": gvar.New("john"), + }, user) + t.Assert(err, nil) + t.Assert(user.Uid, 1) + t.Assert(user.Name, "john") + }) + gtest.C(t, func(t *gtest.T) { + type User struct { + Uid int + Name string + } + var user *User + err := gconv.Struct( + g.Map{ + "uid": gvar.New(1), + "name": gvar.New("john"), + }, &user) + t.Assert(err, nil) + t.Assert(user.Uid, 1) + t.Assert(user.Name, "john") + }) +} diff --git a/database/gdb/gdb_func.go b/database/gdb/gdb_func.go index 032ab1b5c..9286d7c0e 100644 --- a/database/gdb/gdb_func.go +++ b/database/gdb/gdb_func.go @@ -13,6 +13,7 @@ import ( "github.com/gogf/gf/internal/empty" "github.com/gogf/gf/internal/utils" "github.com/gogf/gf/os/gtime" + "github.com/gogf/gf/util/gutil" "reflect" "regexp" "strings" @@ -56,6 +57,12 @@ var ( quoteWordReg = regexp.MustCompile(`^[a-zA-Z0-9\-_]+$`) ) +// ListItemValues is alias for gutil.ListItemValues. +// See gutil.ListItemValues. +func ListItemValues(list interface{}, key interface{}, subKey ...interface{}) (values []interface{}) { + return gutil.ListItemValues(list, key, subKey...) +} + // GetInsertOperationByOption returns proper insert option with given parameter