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

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

如何將此緩存項轉換回地圖切片?

如何將此緩存項轉換回地圖切片?

Go
慕村225694 2021-09-09 15:06:54
我還是 Go 的新手,并嘗試使用Beego 的緩存。我可以將 []map[string]string 放入緩存中,但無法弄清楚如何將值轉換回 []map[string]string。例如,要將項目放入緩存中:m:=make([]map[string]string)// add items to the slice of maps.......// cache itif err := c.Put("key", m, 100); err != nil {    fmt.Println(err)}// retrieve itn := c.Get("key")fmt.Println(reflect.TypeOf(n)) // ==>string// failed attempta := n.([]map[string]string)fmt.Println(a) // panic: interface conversion: interface is string, not []map[string]string如何將 n 轉換為地圖切片?
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

深入研究代碼似乎即使它說 interface{} 它實際上將所有內容壓縮為 []byte


https://github.com/astaxie/beego/blob/master/cache/memcache/memcache.go#L77


當它Get把一切都轉換成string


https://github.com/astaxie/beego/blob/master/cache/memcache/memcache.go#L61


所以你需要自己編組/解組數據結構。


請參閱此示例并使用提供的假人替換您的調用和錯誤檢查:


http://play.golang.org/p/9z3KcOlgAx


package main


import (

    "bytes"

    "encoding/json"

    "log"

)


var cache map[string]string = make(map[string]string)


func Put(key, value string) {

    cache[key] = value

}


func Get(key string) string {

    return cache[key]

}


func main() {


    m := map[string]string{

        "A": "1",

        "B": "2",

    }

    if b, err := json.Marshal(m); err != nil {

        log.Fatal(err)

    } else {

        Put("myKey", string(b))

    }


    b := bytes.NewBufferString(Get("myKey"))


    var mm map[string]string

    if err := json.Unmarshal(b.Bytes(), &mm); err != nil {

        log.Fatal(err)

    }


    log.Printf("%#v", mm)

}


查看完整回答
反對 回復 2021-09-09
  • 1 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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