我有以下一段代码,我在其中尝试将数组添加到 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)
}
注意:信息而不是*信息
牛魔王的故事
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 会调用这个方法来对你的数据进行字符串化(或编组)。
- 2 回答
- 0 关注
- 308 浏览
添加回答
举报
0/150
提交
取消