本文介绍了不能编组,(实现编码.BinaryMarshaler)。具有多个对象的Go-redis SDD的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一段代码,我试图在其中向redis集中添加一个数组,但出现错误。

package main

import (
    "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,但出现了相同的错误。我将如何在偶像意义上做到这一点?

推荐答案

marshalBinary()方法应如下

func (i Info) MarshalBinary() ([]byte, error) {
    return json.Marshal(i)
}

注意:信息而不是*信息

这篇关于不能编组,(实现编码.BinaryMarshaler)。具有多个对象的Go-redis SDD的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-11 13:42