我正在使用“RPUSH”命令推入我的 redis 基础对象。
// object is of type interface
var network bytes.Buffer
gob.NewEncoder(&network)
enc.Encode(object /* interface{} */)
redis.String(d.Conn.Do("RPUSH", "objects", network.String()))
Redigo 做我所期待的,它正在推动所有数据结构 gob 编码。
现在我正在尝试检索它们:
sall, _ := redis.Strings(d.Conn.Do("LRANGE", "todos", "0", "-1"))
fmt.Printf("%T", sall) // type []string as expected
// At this point, I have no idea if I should store the data in a buffer, or convert it directly as bytes. actually, here I'm lost
var network bytes.Buffer
var object []interface{}
dec := gob.NewDecoder(network)
err := dec.Decode(inout)
fmt.Printf("%v", err) // decode error:EOF
对它们进行解码的最佳方法是什么?我想将它们作为接口的一部分返回{}。但即使我的对象被编码为 gob 数据。都是用redis的方式推送的,那么从gob的角度看能不能算是一个切片呢?
我可以迭代其他列表并一一解码。但我对效率没有信心。我假设 gob 想要一个以它的方式编码的切片结构。所以我的问题是:有没有什么技巧可以有效地将我的 gob 数据片段解码为数据结构的集合?或者我应该以另一种方式存储我的数据结构(我假设用 RPUSH 存储我的数据可以防止非原子操作)