结构的AddFlat映射

时间:2018-06-19 09:34:34

标签: go redis

如何解组struct的地图?

使用

map[string] Person类型添加到redis
conn.Do("HMSET", redis.Args{"Teams"}.AddFlat(values)...);

我可以打印一个值

v, err := redis.String(conn.Do("HGET", key, field))

log.Print(v)成功打印了值,但是如何将其解组回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 `     
}

1 个答案:

答案 0 :(得分:0)

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
}

你可以使用它们来编组你的结构,用你的地图交换人,同时确保你的结构有结构标记和每个字段的大写第一个字符