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