为了账号安全,请及时绑定邮箱和手机立即绑定

无法编组。带有多个对象的 go-redis Sdd

无法编组。带有多个对象的 go-redis Sdd

Go
慕村9548890 2022-05-23 16:57:32
我有以下一段代码,我在其中尝试将数组添加到 redis 集中,但它给了我一个错误。package mainimport (    "encoding/json"    "fmt"    "github.com/go-redis/redis")type Info struct {    Name string    Age  int}func (i *Info) MarshalBinary() ([]byte, error) {    return json.Marshal(i)}func main() {    client := redis.NewClient(&redis.Options{        Addr:        "localhost:6379",        Password:    "",        DB:          0,        ReadTimeout: -1,    })    pong, err := client.Ping().Result()    fmt.Print(pong, err)    infos := [2]Info{        {            Name: "tom",            Age:  20,        },        {            Name: "john doe",            Age:  30,        },    }    pipe := client.Pipeline()    pipe.Del("testing_set")    // also tried this    // pipe.SAdd("testing_set", []interface{}{infos[0], infos[1]})    pipe.SAdd("testing_set", infos)    _, err = pipe.Exec()    fmt.Println(err)}我得到错误can't marshal [2]main.Info (implement encoding.BinaryMarshaler)我还尝试将每个信息转换为[]byte并传递[][]byte...给SAdd但相同的错误。我将如何以惯常的方式做到这一点?
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

MarshalBinary() 方法应该如下


func (i Info) MarshalBinary() ([]byte, error) {

    return json.Marshal(i)

}

注意:信息而不是*信息


查看完整回答
反对 回复 2022-05-23
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

Redis是基于键值对的,键值都是字符串等基于字符串的数据结构。因此,如果你想把一些数据放到redis中,你应该把这些数据字符串做成。


我认为你应该像下面的代码那样实现这个接口,以使 go-redis 能够对你的类型进行字符串化:


func (i Info) MarshalBinary() (data []byte, err error) {

    bytes, err := json.Marshal(u)

    return bytes, err

}

这样,你实现了这个方法,go-redis 会调用这个方法来对你的数据进行字符串化(或编组)。


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信