我有一段代码,在这段代码中,我试图将一个数组添加到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,但发生了相同的错误。我该如何从神学上做到这一点呢?
发布于 2020-12-25 21:13:20
MarshalBinary()方法如下所示
func (i Info) MarshalBinary() ([]byte, error) {
return json.Marshal(i)
}注意:信息而不是*信息
发布于 2021-06-01 12:24:16
Redis基于键值对,键值都是字符串和其他基于字符串的数据结构。因此,如果您想要将一些数据放入redis中,您应该将这些数据字符串。
我认为你应该像下面的代码一样实现这个接口,让go-redis能够字符串你的类型:
func (i Info) MarshalBinary() (data []byte, err error) {
bytes, err := json.Marshal(u)
return bytes, err
}通过这种方式,您实现了此方法,go-redis将调用此方法来对您的数据进行字符串化(或编组)。
https://stackoverflow.com/questions/60925203
复制相似问题