go - AddFlat 结构图
问题描述
如何解组结构的映射?
添加一个 map[string]
类型Person
到redis使用
conn.Do("HMSET", redis.Args{"Teams"}.AddFlat(values)...);
我能够打印一个值
v, err := redis.String(conn.Do("HGET", key, field))
log.Print(v)
成功打印了该值,但是如何将其解组回 struct 类型Person
?
我是如何添加的
m:= make(map[string]Person)
m['E21']=Person{"FirstName","LastName"}
HMSet("Team", m)
我如何添加到 redis
func HMSet(key string, values map[string]dataobjects.Person) error {
conn := Pool.Get()
defer conn.Close()
if _, err := conn.Do("HMSET", redis.Args{key}.AddFlat(values)...); err != nil {
log.Fatal(err)
}
return nil
}
我是怎么找回来的
func HGet(key, field string) error {
conn := Pool.Get()
defer conn.Close()
v, err := redis.Bytes(conn.Do("HGET", key, field))
if err != nil {
fmt.Println(err)
return err
}
// I am able to print v succesfully,but how to return Person object from v
return nil
}
我的结构
type Person struct {
FirstName string `FirstName `
LastName string `LastName `
}
解决方案
func marshal(in interface{}) []byte {
var buf bytes.Buffer
encoder := gob.NewEncoder(&buf)
err := encoder.Encode(in)
assert.Nil(err)
return buf.Bytes()
}
func unmarshal(data []byte) Person {
buffer := bytes.NewBuffer(data)
decoder := gob.NewDecoder(buffer)
var p Person
err := decoder.Decode(p)
assert.Nil(err)
return p
}
您可以使用这些来编组您的结构,将人员与您的地图交换,还可以确保您的结构具有结构标签并且每个字段的首字母大写
推荐阅读
- r - 使用 data.table 和 for 循环为多列创建表
- java - 我的更改活动按钮不起作用
- java - jaxb2-maven-plugin -- com.sun.istack.SAXParseException2:属性“类型”已定义。使用 <jaxb:property> 解决此冲突
- c - fgets() 是否以某种方式保持它停止从 FILE * 读取的位置?
- python - Keras 错误:ValueError:tf.function-decorated 函数试图在非首次调用时创建变量
- javascript - 在视口调整大小更新组件上
- performance - DAX 性能问题:为什么我的 SUMX() 这么慢?
- jointjs - 如何使用 JointJS 获取 UML 类的 elementView 大小?
- python - 具有默认参数和命名空间的模块函数?
- xml - XML - 元素的属性 - MS Access