亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法編組。帶有多個對象的 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 關注
  • 357 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號