求教,go反射相关

weixin_38063369 2019-09-20 10:46:43
```
//GetHMapData 从数据库获取数据
type GetHMapData interface {
RedisKey() string
LoadDb() error
// SaveCache() error
}

//LoadCache 从缓存获取数据
func LoadCache(hd GetHMapData) error {
cli := redis.GetCacheConn()
bookMap := cli.HGetAll(hd.RedisKey()).Val()
return redis.CoverMapToStruct(bookMap, &hd)
}

//GetData 获取数据
func GetData(hd GetHMapData) error {
if err := LoadCache(hd); err != nil {
log.Log.Errorf("load db err:", err)
if err := hd.LoadDb(); err != nil {
return err
}
SaveCache(hd)
}
return nil
}

//SaveCache 将Hmap存入redis
func SaveCache(u GetHMapData) error {
uMap, err := redis.StructToMap(u)
if err != nil || uMap == nil {
log.Log.Errorf("保存缓存数据出错:%v", err)
return err
}
cli := redis.GetCacheConn()
err = cli.HMSet(u.RedisKey(), uMap).Err()
if err != nil {
log.Log.Errorf("保存缓存数据出错:%v", err)
return err
}
cli.Expire(u.RedisKey(), constent.DefaultExpire)
return nil
}
```
想实现一个接口,完成从数据库查数据,取不到就查数据库的功能

这个是redis这边两个函数的实现
```

//CoverMapToStruct 将redis取出的数据转成简单结构体
func CoverMapToStruct(data map[string]string, s interface{}) error {
buf, err := json.Marshal(data)
if err != nil {
return err
}
return json.Unmarshal(buf, s)
}

//StructToMap 将结构体转成map存入redis
func StructToMap(s interface{}) (map[string]interface{}, error) {
buf, err := json.Marshal(s)
if err != nil {
return nil, err
}
dest := make(map[string]interface{})
err = json.Unmarshal(buf, &dest)
if err != nil {
return nil, err
}
return dest, nil
}
```

现在无法实现该功能,求指教我这个思路哪里出错了?
...全文
32 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38095150 2019-09-20
  • 打赏
  • 举报
回复
这个问题通过添加一个目标dest指针解决了,谢谢
weixin_38093352 2019-09-20
  • 打赏
  • 举报
回复
无法实现是什么意思?报了什么错?你接口实现逻辑是什么?

473

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧