首页 > 解决方案 > 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 `     
}

标签: goredis

解决方案


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
}

您可以使用这些来编组您的结构,将人员与您的地图交换,还可以确保您的结构具有结构标签并且每个字段的首字母大写


推荐阅读