修复redis hash序列化 字段名接收tag json 标签
This commit is contained in:
parent
7c09e141cd
commit
2a4c3d97ea
@ -1,6 +1,7 @@
|
|||||||
package cluster
|
package cluster
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"go_dreamfactory/lego/utils/codec"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
@ -52,10 +53,12 @@ func (this *Redis) HMSet(key string, v interface{}) (err error) {
|
|||||||
/*
|
/*
|
||||||
Redis Hget 命令用于返回哈希表中指定字段的值
|
Redis Hget 命令用于返回哈希表中指定字段的值
|
||||||
*/
|
*/
|
||||||
func (this *Redis) HGet(key string, field string, value interface{}) (err error) {
|
func (this *Redis) HGet(key string, field string, v interface{}) (err error) {
|
||||||
var resultvalue string
|
cmd := redis.NewStringCmd(this.getContext(), "HGET", key, field)
|
||||||
if resultvalue = this.client.Do(this.getContext(), "HSET", key, field).String(); resultvalue != string(redis.Nil) {
|
this.client.Process(this.getContext(), cmd)
|
||||||
err = this.decode.Decoder([]byte(resultvalue), value)
|
var _result string
|
||||||
|
if _result, err = cmd.Result(); err == nil {
|
||||||
|
err = this.decode.Decoder(codec.StringToBytes(_result), v)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -160,8 +160,8 @@ func Test_Redis_Type(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TestData struct {
|
type TestData struct {
|
||||||
Name string
|
Name string `json:"name"`
|
||||||
Agr int
|
Agr int `json:"agr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_Redis_Encoder_Struct(t *testing.T) {
|
func Test_Redis_Encoder_Struct(t *testing.T) {
|
||||||
@ -177,16 +177,20 @@ func Test_Redis_Encoder_int(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Test_Redis_Encoder_Hash(t *testing.T) {
|
func Test_Redis_Encoder_Hash(t *testing.T) {
|
||||||
// err := redis.HMSet("test:1003", &TestData{Name: "liwei1dao", Agr: 12})
|
err := redis.HMSet("test:1003", &TestData{Name: "liwei1dao", Agr: 12})
|
||||||
// fmt.Printf("err:%v\n", err)
|
fmt.Printf("err:%v\n", err)
|
||||||
// data := &TestData{}
|
// data := &TestData{}
|
||||||
// err = redis.HGetAll("test:1003", data)
|
// err = redis.HGetAll("test:1003", data)
|
||||||
// fmt.Printf("data:%v err:%v\n", data, err)
|
// fmt.Printf("data:%v err:%v\n", data, err)
|
||||||
|
|
||||||
data1 := map[string]*TestData{"li_1": {Name: "liwei2dao", Agr: 56}, "li_2": {Name: "liwei3dao", Agr: 78}}
|
// name := ""
|
||||||
err := redis.HMSet("test:1004", data1)
|
// err := redis.HGet("test:1003", "Name", &name)
|
||||||
fmt.Printf("err:%v\n", err)
|
// fmt.Printf("name:%v err:%v", name, err)
|
||||||
data2 := make(map[string]*TestData)
|
|
||||||
err = redis.HGetAll("test:1004", data2)
|
// data1 := map[string]*TestData{"li_1": {Name: "liwei2dao", Agr: 56}, "li_2": {Name: "liwei3dao", Agr: 78}}
|
||||||
fmt.Printf("data2:%v err:%v\n", data2, err)
|
// err := redis.HMSet("test:1004", data1)
|
||||||
|
// fmt.Printf("err:%v\n", err)
|
||||||
|
// data2 := make(map[string]*TestData)
|
||||||
|
// err = redis.HGetAll("test:1004", data2)
|
||||||
|
// fmt.Printf("data2:%v err:%v\n", data2, err)
|
||||||
}
|
}
|
||||||
|
@ -98,12 +98,18 @@ func (this *Encoder) EncoderToMap(v interface{}) (data map[string][]byte, err er
|
|||||||
elem := vof.Elem()
|
elem := vof.Elem()
|
||||||
relType := elem.Type()
|
relType := elem.Type()
|
||||||
for i := 0; i < relType.NumField(); i++ {
|
for i := 0; i < relType.NumField(); i++ {
|
||||||
|
fieldInfo := relType.Field(i)
|
||||||
|
tag := fieldInfo.Tag
|
||||||
|
name := tag.Get("json")
|
||||||
|
if len(name) == 0 {
|
||||||
|
name = fieldInfo.Name
|
||||||
|
}
|
||||||
field := elem.Field(i).Interface()
|
field := elem.Field(i).Interface()
|
||||||
var valuedata []byte
|
var valuedata []byte
|
||||||
if valuedata, err = this.Encoder(field); err != nil {
|
if valuedata, err = this.Encoder(field); err != nil {
|
||||||
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", field, err)
|
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", field, err)
|
||||||
}
|
}
|
||||||
data[relType.Field(i).Name] = valuedata
|
data[name] = valuedata
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user