diff --git a/database/gredis/gredis_z_example_test.go b/database/gredis/gredis_z_example_test.go index 20c4cd38a..499d31b34 100644 --- a/database/gredis/gredis_z_example_test.go +++ b/database/gredis/gredis_z_example_test.go @@ -64,6 +64,43 @@ func Example_autoMarshalUnmarshalStruct() { fmt.Println(user2.Id, user2.Name) } +func Example_autoMarshalUnmarshalStructSlice() { + type User struct { + Id int + Name string + } + var ( + err error + result *gvar.Var + key = "user-slice" + users1 = []User{ + { + Id: 1, + Name: "john1", + }, + { + Id: 2, + Name: "john2", + }, + } + ) + + _, err = g.Redis().Do("SET", key, users1) + if err != nil { + panic(err) + } + result, err = g.Redis().DoVar("GET", key) + if err != nil { + panic(err) + } + + var users2 []User + if err = result.Structs(&users2); err != nil { + panic(err) + } + fmt.Println(users2) +} + func Example_hashSet() { var ( err error diff --git a/database/gredis/gredis_z_unit_test.go b/database/gredis/gredis_z_unit_test.go index 7f1384d74..23e5804f0 100644 --- a/database/gredis/gredis_z_unit_test.go +++ b/database/gredis/gredis_z_unit_test.go @@ -7,6 +7,7 @@ package gredis_test import ( + "github.com/gogf/gf/container/gvar" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/util/guid" "testing" @@ -339,3 +340,45 @@ func Test_Auto_Marshal(t *testing.T) { t.Assert(user2.Name, user.Name) }) } + +func Test_Auto_MarshalSlice(t *testing.T) { + var ( + err error + redis = gredis.New(config) + key = guid.S() + ) + defer redis.Do("DEL", key) + + type User struct { + Id int + Name string + } + + gtest.C(t, func(t *gtest.T) { + var ( + result *gvar.Var + key = "user-slice" + users1 = []User{ + { + Id: 1, + Name: "john1", + }, + { + Id: 2, + Name: "john2", + }, + } + ) + + _, err = redis.Do("SET", key, users1) + t.Assert(err, nil) + + result, err = redis.DoVar("GET", key) + t.Assert(err, nil) + + var users2 []User + err = result.Structs(&users2) + t.Assert(err, nil) + t.Assert(users2, users1) + }) +} diff --git a/util/gconv/gconv_slice.go b/util/gconv/gconv_slice.go index 39e44307c..56ca67f30 100644 --- a/util/gconv/gconv_slice.go +++ b/util/gconv/gconv_slice.go @@ -109,7 +109,11 @@ func MapsDeep(value interface{}, tags ...string) []map[string]interface{} { } case []map[string]interface{}: - return r + list := make([]map[string]interface{}, len(r)) + for k, v := range r { + list[k] = MapDeep(v, tags...) + } + return list default: array := Interfaces(value)