我有以下一段代碼,我在其中嘗試將數組添加到 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 關注
- 357 瀏覽
添加回答
舉報
0/150
提交
取消