gpt4 book ai didi

caching - 如何将此缓存项转换回 map slice ?

转载 作者:IT王子 更新时间:2023-10-29 02:05:41 27 4
gpt4 key购买 nike

我还是 Go 的新手,正在尝试使用 Beego's cache .我可以将 []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 转换为 map slice ?

最佳答案

深入研究代码似乎即使它说的是 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)
}

关于caching - 如何将此缓存项转换回 map slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27258181/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com