gpt4 book ai didi

go - 将通用结构保存到 redis

转载 作者:IT王子 更新时间:2023-10-29 02:31:10 25 4
gpt4 key购买 nike

在编写 golang 网络服务器时,我不得不使用某种缓存,所以我选择了 redis。我需要某种函数,它采用任何结构并将其按原样保存到 redis 作为值。有什么方法可以在不使用 interface{} 作为接收参数或重复我自己太多但仍然保持类型安全的情况下做到这一点?

最佳答案

使用 gob 将结构值编码为 []byte , json或者类似的编码包。将 []byte 存储在 Redis 中。获取数据时逆向过程。

假设 Redis 客户端具有 Set 的方法和 Get ,使用 JSON 包的代码将如下所示:

func set(c *RedisClient, key string, value interface{}) error {
p, err := json.Marshal(value)
if err != nil {
return err
}
return c.Set(key, p)
}

func get(c *RedisClient, key string, dest interface{}) error {
p, err := c.Get(key)
if err != nil {
return err
}
return json.Unmarshal(p, dest)
}

像这样使用它来保存一个值:

var v someType
if err := set(c, key, v); err != nil {
// handle error
}

并像这样检索一个值。请注意,指向该值的指针会传递给 get

var v someType
if err := get(c, key, &v); err != nil {
// handle error
}

具体细节需要根据您使用的 Redis 客户端进行调整。

只要应用程序使用相同类型为给定键设置和获取值,这种方法就可以避免重复并且是类型安全的。

关于go - 将通用结构保存到 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com