如何将此缓存项转换回地图切片?

我还是 Go 的新手,并尝试使用Beego 的缓存。我可以将 []map[string]string 放入缓存中,但无法弄清楚如何将值转换回 []map[string]string。


例如,要将项目放入缓存中:


m:=make([]map[string]string)

// add items to the slice of maps

.......

// cache it

if err := c.Put("key", m, 100); err != nil {

    fmt.Println(err)

}

// retrieve it

n := c.Get("key")

fmt.Println(reflect.TypeOf(n)) // ==>string


// failed attempt

a := n.([]map[string]string)

fmt.Println(a) // panic: interface conversion: interface is string, not []map[string]string

如何将 n 转换为地图切片?



慕村225694
浏览 172回答 1
1回答

MMMHUHU

深入研究代码似乎即使它说 interface{} 它实际上将所有内容压缩为 []bytehttps://github.com/astaxie/beego/blob/master/cache/memcache/memcache.go#L77当它Get把一切都转换成stringhttps://github.com/astaxie/beego/blob/master/cache/memcache/memcache.go#L61所以你需要自己编组/解组数据结构。请参阅此示例并使用提供的假人替换您的调用和错误检查:http://play.golang.org/p/9z3KcOlgAxpackage mainimport (    "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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go