求教,go反射相关

shileislslsl · · 531 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

``` //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 } ``` 现在无法实现该功能,求指教我这个思路哪里出错了?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

531 次点击  
加入收藏 微博
2 回复  |  直到 2019-07-02 09:40:51
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传