go - 添加结构的平面图

标签 go redis

如何解码结构图?

添加了Person类型的map[string]到redis using

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 `     
}

最佳答案

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
}

您可以使用这些来编码您的结构,将 person 与您的 map 交换,还可以确保您的结构具有结构标签和每个字段的首字母大写

关于go - 添加结构的平面图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925048/

相关文章:

go - BigTable:一个大查询还是一打小查询?

go - 无法将 go lang 应用程序部署到 AWS Elastic Beanstalk

java - 带有对象池的 Jediscluster

redis - LogStash 何时会超过队列容量并丢弃消息?

caching - Grails cache-redis version 1.1.0 插件编译报错

python - Celery - 使用 apply_async 添加 7000 个任务需要 12 秒

node.js - 使用 ioRedis 连接到 ElastiCache 时出现随机 SSL 握手错误

Golang 多模板缓存

pointers - 存储为值的接口(interface);无法更新结构字段的方法

postgresql - 让sqlx MapScan返回字符串